DataModule (Çözüldü)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: DataModule

Mesaj gönderen emin_as »

CariForm degiskeni assign edilmiyor, bu nedenle içinde tuttugun bilgi de formun adresi degil.

Cariform:=TCariForm.Create(Self) do

dersen cariform.image1 vs diye kullanabilrisin.

with Tcariform.Create (self) do
begin
image1. --> çalışır
veya
Aform:=TCariform.Create(Self);

cariform.image1 --> hata verir.
Aform.image1 --> çalışır.

elphi de bu şekilde sadece autocreate form varsa, açılışta o formun degişkeni geçerli olur. Yoksa cariform da tutulan bilgiler tanımsızdır.

Kod: Tümünü seç

procedure TAnaF.YeniCariKayit1Click(Sender: TObject);
var
F:TK_cariF;
begin
F:=TK_cariF.Create(Application);
CariForm:=F;  // Bu satırı eklersen cariform u kullanabilirsin. 
try
   with D_Cari.Cari_Ds do 
[//code]

Kodu yukarıdaki gibi düzenlersen cariform degişkenini atayabilirsin, ama bu durumda form kapatıldıgında cariform:=nil; ile tekrar düzenlenmelidir.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule

Mesaj gönderen abdulkadir »

Kendimi bi acayip hissetmeye basladım.
Access violation at address 0044C433 in module 'LEVENRLER.exe'.Read of address 000009F8.
Hocam hatayı bir sekilde cözmüş olsakta dogru kullanımı neden elde edemiyorum...
bunun uzerinde duruyorum cunku diger butun forlarımda da bu işlemi yapmam gerekecek.

Carilere ait DataModule
TD_Cari = class(TDataModule)
var D_Cari: TD_Cari;

cariler için Cari_Ds: TIBDataSet;

ve buda AfterScroll

Kod: Tümünü seç

procedure TD_Cari.Cari_DsAfterScroll(DataSet: TDataSet);
begin
K_CariF.Edit1.Text:='tamam'; // bu satırı iptal ettimmi hersey normal
end;
bir cok sekilde denedim...

Kod: Tümünü seç

 TK_CariF = class(TForm)
//
 var
 K_CariF: TK_CariF;
//

procedure TAnaF.YeniCariKayit1Click(Sender: TObject);
begin
  with TK_cariF.Create(Self) do  begin
        Show;
    with D_Cari.Cari_Ds do begin
      Close;
      SelectSQL.Clear;
      SelectSQL.Add('SELECT * FROM  CARI');
      Open;
     end;
  end;
end;
Hata başka yerde diyecem Cari_DsAfterScroll daki satırı kaldırdımmı hata vermiyor artık.
Cari_DsAfterOpen ile denedim yine aynı hata.
hatayı bulana kadar şimdilik Cari_Ds nin sadece AfterScroll olayını kullanıyorum.
ne diyecegimi bilemiyorum.....
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 »

arkadaşım bi iletişim problemi var sanırım.
Senin create ettiğin Form K_CariF formu değil.
sen TK_CariF sınıfından bir form oluşturuyorsun.
ama oluşturduğun form K_CariF değil.başka bir kopyasını oluşturuyorsun. K_CariF adı var kendi yok.
K_CariF nin on show olayına şu kodu yaz bakalım ne olacak.

Kod: Tümünü seç

caption:='Bu formun adı --> '+name;
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 »

Haklısın hocam ne diyeyim
seninle olmazda :) delphi ve vista ile iletişim problemimiz var herhalde.
Resim
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: DataModule

Mesaj gönderen emin_as »

Kod: Tümünü seç

procedure TAnaF.YeniCariKayit1Click(Sender: TObject);
begin
   with TK_cariF.Create(Self) do  begin
    K_cariF:=self;  //  bu satiri eklemelisin 
      // üst tarafta var olarak degişkeni belirtmişsin, ama create
      // ettigin forma eşitlemiyorsun.
      //  bu eşitleme olmadığı için K_cariF geçersiz , rasgele bilgiye sahip oluyor.
        Show;
    with D_Cari.Cari_Ds do begin
      Close;
      SelectSQL.Clear;
      SelectSQL.Add('SELECT * FROM  CARI');
      Open;
     end;
  end;
end;
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule ÇÖZÜLDÜ

Mesaj gönderen abdulkadir »

Bu sekilde verdigi hata

Kod: Tümünü seç

C:\LEVENTLER\UNIT\U_AnaF.pas(806,17): Error error 2010: E2010 Incompatible types: 'TK_CariF' and 'TAnaF'
Bu create procedure yi K_CariF formuna yazdım yine hata verdi
Bu şekilde düzenledim Şimdi Hata vermiyor

Kod: Tümünü seç

procedure TAnaF.YeniCariKayit1Click(Sender: TObject);
begin
 try
  Application.CreateForm(TK_CariF, K_CariF);
  with K_CariF  do  begin
        Show;
       end;
  with D_Cari.Cari_Ds do begin
      Close;
      SelectSQL.Clear;
      SelectSQL.Add('SELECT * FROM  CARI');
      Open;
     end;
 except
 end;
end;
Sorun Kesin Create sorunu ama bu bile mantıklı gelmedi. ben artık delphiyi kaldırıp yeniden kurmayı düsünüyordum ki?
project options tan cari formunu Auto cerate forma tasıdım calıstırdım baktım hata vermiyor.
.DPR dosyasındaki kodu kopyalayıp yapıştırdım oldu

Arkadaşlar Zaman ayırıp emek harcadınız Candan teşekkür ederim...
Hayırlı işler bol kazançlar....
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: DataModule

Mesaj gönderen emin_as »

Küçük bir uyarı, kodlarında hala sorun olabilir.
K_CariF application.createform ile bir degişken atıyorsun, ama cari penceresini kapatınca bu K_cariF yi bu kez nil ile sıfırlamalısın.

Kullanıdıgın kodlarda da K_cariF e atama yapılıp, yapılmadığını da test etmelisin.

Kod: Tümünü seç

if assigned(K_CariF) then  //  <--- assigned ile atama yapılıp yapılmadığı kontrol ediliyor
begin
  K_CariF.Edit1.Text:='deneme';   
end;
K_cariF yi kapatınca, basitçe K_cariF:=nil; yazman yeterli olur.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: DataModule (Çözüldü)

Mesaj gönderen abdulkadir »

Ok
Teşekkür ederim...
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla