DataModule (Çözüldü)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

DataModule (Çözüldü)

Mesaj gönderen abdulkadir »

S.a
Arkadaslar kolay gelsin hepinize
carilere ait dosya ve resimleri ayrı bir tabloda tutuyorum.
DataModule kullanıyorum firebird db
ve soru

cari kayıtları içinde gezinirken varsa carinin resmini ekranda göstermeye calısıyorum.
DataModule içerisinden cari formundaki image1 işlem yapamıyorum Access violation hatası alıyorum.
tanımlanan bir değişkenin veya bir nesnenin çalışma esnasında bulunamaması

Kod: Tümünü seç

procedure TD_Cari.Cariler_DsAfterScroll(DataSet: TDataSet);
var
Stream: TMemoryStream;
begin
 with D_Genel do begin
  DosyaKayit_Ds.Close;
  DosyaKayit_Ds.SelectSQL.Clear;
  DosyaKayit_Ds.SelectSQL.Add('SELECT * FROM  DOSYA');
  DosyaKayit_Ds.SelectSQL.Add('WHERE KODU = ''LOGO_1'+dataset.FieldByName('BLKODU').AsString+'''');
  DosyaKayit_Ds.Open;

 if DosyaKayit_Ds.RecordCount >0 then   begin

    Stream:= TMemoryStream.Create;
    try
     DosyaKayit_DsFILEDATA.SaveToStream(Stream);
     CariForm.image1.Picture.bitmap.LoadFromStream(Stream);
     finally
    Stream.Free;
   end;

  end;
 end;
end;
datamodule ilk defa kullanıyorum
acaba datamodule içerisinden bu işlem yapılamıyormu yada baska yontemlemi yapılmalı.
En son abdulkadir tarafından 29 Nis 2009 05:59 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: DataModule

Mesaj gönderen bobasturk »

merhaba,

soruna cevap olmayabilir ama, afterscroll olayında bende coğunlukla hata yaşadım ve sorunları başka türlü çözdüm. örnek vermem gerekirse kullanıcı kayıtlar arasında gezinirken formun üst köşesinde yıl, raporno, ekno alanlarımı tek bir textedit içinde string olarak birleştirip göstermek istemiştim hata ile karşılaşınca bende dbtext editlerin boylarını uygun hale getirerek halletmiştim. şekil olarak biraz kötü oluyor ama yinede idare ediyor.

kolay gelsin.
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DataModule

Mesaj gönderen aslangeri »

s.a.
mutemelen cari formu henüz oluşmadığında bu kodlar çalıştığı içn hata veriyordur.
prosedürün başında

Kod: Tümünü seç

if CariForm=nil then exit ;
koayarsan sorunun çözülür gibime geliyor.
kolay gelsn.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: DataModule

Mesaj gönderen emin_as »

Project options da autocreate formlar sıralıdır. Program çalışınca en üstten en alta dogru sırayla autocreate formları oluşturur. Datamodule ekrana çizilmese de benzer bir sıralamaya sahiptir.

Afterscroll olayı direk uygulama çalışınca devreye giriyorsa, tasarımında bir sorun var demektir. Pencereleri design ederken tableları açsan da, programı derlerken kapalı tutmalısın. Program açıldıktan sonra buldugu klasöre veya ini dosyasına göre veritabanının nerde olduguna karar verip, tabloları açmalıdır. Eğer tablolar yoksa, kullanıcıya veritabanı dosyasını bulamıyorum diyerek ayar penceresi veya uyarı penceresi göstermelidir.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

aslangeri yazdı:s.a.
mutemelen cari formu henüz oluşmadığında bu kodlar çalıştığı içn hata veriyordur.
prosedürün başında

Kod: Tümünü seç

if CariForm=nil then exit ;
koayarsan sorunun çözülür gibime geliyor.
kolay gelsn.
hocam cari form zaten acık icindeyim
cari formdaki dbnavigator ile ileri geri kayıtlar arasında geziniyorum

datamodule icinde
CariForm.image1 dedimmi hata veriyor.
biraz arastırm ama hata devam ediyor..
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DataModule

Mesaj gönderen aslangeri »

MDI form kullanıyormusunuz?
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

S.a
emin_as arkadasımın yazdıklarını okuduktan sonra projemdeki cerate olması gereken sıralamayı gözden gecirdim.
ve gercekten sorun cıkabilecek sekildeydi
datamoduleler outo create edilirken formlar manuel idi
sıralamayı düzenledim.

tasarım pencersinde bütün tabloları kapalı tutuyorum.

cari formu manuel create ederken oncreate olayında
cari datamodulu de olusturdum

Kod: Tümünü seç

 Application.CreateForm(TD_Cari, D_Cari);//datamoule  
cari datamodulun oncreate olayında islem yapacagım tabloları actım.

Kod: Tümünü seç

 Cari_Ds.Active:=True;  
ve yine Cari_DsAfterScroll olayında hata almaya devam ediyorum..

sunu denedim
cari forma 1 tane edit yerlestirdim Cari_DsAfterScroll olayında sadece sunu yazdım

Kod: Tümünü seç

procedure TD_Cari.Cari_DsAfterScroll(DataSet: TDataSet);
begin
K_CariF.Edit1.Text:='deneme';
end;
aynı seyi image ve label içinde denedim ama olmadı cari formundaki hicbir componente AfterScroll olayında işlem yapamıyorum..
Sonra sunu denedim

Kod: Tümünü seç

procedure TAnaF.Button1Click(Sender: TObject);
begin
  with TK_cariF.Create(Application)   do  begin
    Show;
    Edit1.Text:='deneme edit';
    Label1.Caption:='deneme label';
 end;
end;
Bu sekilde hata vermedi
bu ne anlama geldi Create edilirken ne yaparsan yap Create ettikten sonra dokunma mı?

Componentlere bir atama yapmasam
Cari formun içinde cariler arasında dbnavigator ile gezinebiliyorum
Cari_DsAfterScroll olayında yazdıgım SQL ile o cariye ait baska tablolardaki bilgileri cari formundaki dbedit lere ve dbgrid lere çekebiliyorum.

atama yapmasam hersey normal ama yapınca program kırılıyor.
Garip bir durum bir mantık hatası var ama nerde?
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

aslangeri yazdı:MDI form kullanıyormusunuz?
evet Ana formum mdi
bu cari form child form
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DataModule

Mesaj gönderen aslangeri »

ok.
sorun şimdi anlaşıldı.
Cariformu create ederken nasıl create ediyorsunuz.
oluşturduğunuz form CariForm mu yoksa CariForm dan türeyen başka bir form mu?
Afterscroll proceduresini cariforma yazın. datamodule u create ettiğiniz zaman ilgili dataset in after scroll olayına yazdığını procedureyi bağlayın.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

S.a
Hıım

formları olusturmak için kullandıgım ortak procedure

Kod: Tümünü seç

procedure TAnaF.CreateFormFromName(const FormName :string; img:integer);
var
  FC : TFormClass;
  F : TForm;
begin
  FC := TFormClass(FindClass(FormName));
  F  := FC.Create(Application);
  try
   with AdvOfficeMDITabSet1 do begin
   with AddTab(F) do begin
      ImageIndex:=img;
      Hint:=F.Caption;
      F.WindowState:=wsMaximized;
      F.Show;
    end;
   end;
  except
    on E: Exception do
      raise Exception.CreateFmt('%s', [E.Message]);
     end;
end;
yukardaki kodun calısması için

Kod: Tümünü seç

procedure TAnaF.FormCreate(Sender: TObject);
begin
  RegisterClasses([TK_CariF,TServisF,TStok]);//vs
end;

procedure TAnaF.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnRegisterClasses([TK_CariF,TServisF,TStok]);
 Action:=Cafree;
end;
ve bu sekilde acıyorum

Kod: Tümünü seç

procedure TAnaF.KisayolCubugu1Click(Sender: TObject);
begin
 CreateFormFromName('TK_CariF',27);
end;
evet sorun burda galiba uzun zamandır bu sekilde kullanıyordum ama
hic hata ile karsılasmadım ihtiyac duyunca baska seylere hatalarda meydana cıkıyor.
ben kısa kısa yazmaya özen gösterdim ama
bir yıgın kod ve yaklasık 30 tane form var, formstyle özelligi aynı olanları hep bu yöntemle acıyorum.
bu ortak kullandıgım procedure yi degiştirmem gerekecek
neden ortak kullandıgımı tahmin etmissinizdir bir cok formdan cagrılıyor bu formlar her yere aynı create olayını yazmayalım diye ama
sorun cıkarmayacak bir sekil vermek gerekir
biraz düsüneyim biraz calısayım cözeriz insaallah
tüm arkadaslara tesekkür ederim.....
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

S.a
aslangeri yazdı: Afterscroll proceduresini cariforma yazın. datamodule u create ettiğiniz zaman ilgili dataset in after scroll olayına yazdığını procedureyi bağlayın.
hocam Sorunu yukarda anlattıgınız yöntemle halletim ama merak ettim
datamodu de cariAfterscroll proceduresinden cari formundaki bir komponentte erişilemez gibi bir kuralmı var? yoksa yöntemmi yanlış.

Sevgiler...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DataModule

Mesaj gönderen aslangeri »

kural yok erişebilirsin.
ancak sen CariFormu create etmiyorsun.
CariFormdan türemiş başka bir formu create ediyorsun. bundan dolayıda Cariforma erişemiyorsun.
MDI uygulamalarda dikkat edilmesi gereken bir nokta.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

Allah allah
hocam nasıl create etmem gerekir.
su sekilde create ediyorum su an ama hata devam ediyor.

Kod: Tümünü seç

procedure TAnaF.YeniCariKayit1Click(Sender: TObject);
var
F:TK_cariF;
begin
 F:=TK_cariF.Create(Application);
 try
   with D_Cari.Cari_Ds do begin
    Open;// cari tabloları
   end;
  with AnaF.AdvOfficeMDITabSet1.AddTab(F) do begin
    Caption:= LeftStr(F.Caption,20);
    ImageIndex:=0;
    Hint:=F.hint;
    F.Show;
   end;
 except on E: Exception do
  raise Exception.CreateFmt('%s',[E.Message]);end;
end;
mdi de farklı bir seymi var?
teşekkür ederim...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: DataModule

Mesaj gönderen aslangeri »

kodlara bak bakalım hangi formu creta ediyorsun.

Kod: Tümünü seç

var
F:TK_cariF;
begin
F:=TK_cariF.Create(Application);
....
create ettiğin formun adı "F" CariKayitFormunu create etmiyorsun.
TK_CariF tipinde bir form oluşturuyorsun.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

cari form yapısı bu

Kod: Tümünü seç

unit U_K_CariF;

type
  TK_CariF = class(TForm)
  //componentler
  private
  //procedure
  public
 //procedure
var
  K_CariF: TK_CariF;

implementation
ben bu formu yanlışmı olusturuyorum...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla