Dbgritteki veri eklendiginde gözükmüyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
fatihyegen
Üye
Mesajlar: 19
Kayıt: 08 May 2020 05:20

Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen fatihyegen »

Veritabanına edit textlerden veri ekliyorum ve bunu dbgridde listeletiyorum ekleme işlemini farklı bir formda yapıyorum dbgrid anasayfadaki formda
veri ekleniyor fakat eklendigi zaman anasayda gözükmüyor programı açıp kapatınca gözüküyor benim istedigim ekleye bastıgımda direkt anasayafada
dbgridde listelenmesi bunun için şu yontemleri denedim sql kapadım açtım sayfa showladıgında ama düzelmedi
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen yusuf simsek »

Anasayfa da ki dbgird bağlı olan sql ( QUERY ) kapat - aç yapıyorsunuz değil mi?

Kullandığınız query.Connection bileseni AutoCommit özelliği akti mi? kontrol eder misiniz
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
fatihyegen
Üye
Mesajlar: 19
Kayıt: 08 May 2020 05:20

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen fatihyegen »

Auto commiti bulamadım fakat şu ifade aktif autocalcfields
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen ertank »

Merhaba,

Yazdıklarınızdan anladığım kadarıyla;
- Form1 üzerinde açık duran bir tablonuz var. FDQuery1 isimli bileşen üzerinden veri aldığını varsayalım.
- Form2 üzerinde bu tablonun gösterdiği kayıtlara ekleme yapıyorsunuz. Kayıt ekleme işlemini Form1.FDQuery1 isimli bileşeni kullanarak *değil* farklı bir bileşen ile yapıyorsunuz varsayalım.

Eğer sizin içinde bulunduğunuz durum bu ise; Form1 üzerindeki FDQuery1 bileşeninin bilgileri okuduğu tabloya yeni veri eklendiğini algılaması söz konusu olamaz. Siz uygulama çalışma mantığında veri eklendiğini bildiğiniz için belli bir olay gerçekleştiği zaman ilgili bileşenin "verileri güncelleme" yapmasını sağlayacak kodlamayı yapmanız gerekir. Bu genellikle aşağıdaki şekilde yapılır.

Kod: Tümünü seç

Form1.FDQuery1.Refresh();
Daha farklı ifade etmek gerekir ise yukarıdaki satırı Form2 içinde kayıt işlemini tamamladığınız satırın sonrasına yazabilirsiniz. Eğer kayıt işlemi kod kullanmadan yapılıyor ise kayıt işleminin gerçekleşmesinden sonra çalışacak olaya (event) bu satırı yazabilirsiniz. Olası olay adı TDataSet.OnAfterPost() olabilir.
fatihyegen
Üye
Mesajlar: 19
Kayıt: 08 May 2020 05:20

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen fatihyegen »

Hocam dediginiz işlemleri denedim fakat olayı size fotograflarla açıklamak istedim
dediginiz kodu ilk basta anasayfdaki ekle butonuna koydum orada açılan form sayfasında veri ekliyor daha sonra tekrar anasayfada ekle butonuna
tıkladagımda veriyi db gridde gösteriyor fakat ben bunu form6 daki ekle butonuna ve geri al butonuna tıklandıgında olmasını istiyorum aynı kodları yapıyorum

form4.listele.refresh() ;

yapıyorum fakat yine çalısmıyor form4 deki ekleye tıklayınca çalısıyor sadece


resim linkleri


https://hizliresim.com/PkLu9q

https://hizliresim.com/3mgyym

https://hizliresim.com/3zJuT6


https://hizliresim.com/u5BPNR
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen ertank »

Çözüm 1: Formları "Modal" olarak göstermiyorsunuz. Dolayısı ile yazdığınız kod Form6 daha gösterilmeden önce çalışıyor. Başka bir ifade ile daha kayıt eklenmeden listeyi güncellemiş oluyorsunuz. Form4.Button1Click() olayının kodunu aşağıdaki şekilde değiştirmeyi deneyin.

Kod: Tümünü seç

  try
    Form4.Visible := False;
    Form6.ShowModal(); // Kod işleyişi bu noktaya geldiğinde Form6 kapatılmadan aşağıdaki kodlar çalışmaz.
  finally
    Form4.Visible := True;
    Listele.Refresh();  // Form6 üzerinde kayıt bu noktada girilmiş olabileceği için ekrandaki kayıt listesi tazeleniyor
  end;
Çözüm 2: Tavsiye ettiğim kodu kullanmanızı önerdiğim yer "kayıt işlemini tamamladığınız satırın sonrası" idi. Siz Form6 üzerinde tavsiye edilen kodu ilk olarak yazmışsınız. O kod çalıştığında halen tabloya kayıt eklenmemiş oluyor. Dolayısıyla ana formdaki liste tazeleniyor olmasına rağmen yeni kayıt olmadan tazeleme yapılıyor. Form4.Button1Click() olayında ilk üç satırı ilgili kod bloğunun en sonuna taşır iseniz sorununuz yine düzelecektir.

Bunun dışında;
- Kod paylaşımlarınızı resim değil mesaj yazdığınız ekranda "Tam Editör & Önizleme" butonuna tıklayarak kod görüntürü butonu ile gelen kısıma yazarsanız okunması ve anlaşılması daha rahat olur.
- Her programlama dili için kabul görmüş bazı standartlar var. Bunları bir süre ilgili programlama dilini kullandığınızda gördüğünüz örnek kodlar ve tecrübe ile öğrenirsiniz. Delphi editörü içinde CTRL+D tuşuna bastığınızda gelen mesajı onaylar iseniz Delphi sizin için kodunuzu okunabilirliği çok daha rahat olacak hale getirecektir.
- Veritabanı işlemlerinde mümkün olan en az adımda işleminizi tamamlamaya çalışın. Veri miktarı arttıkça yavaşlıklar ve sorunlar büyüyecektir. Paylaştığınız kod örneğinde önce query/tabloyu kapatıyorsunuz ardından açıyorsunuz. En son olarak tazeleme yapıyorsunuz. Halbuki sadece tazeleme yapmanız liste içindeki kayıtlara eklenen varsa (transaction isolation level konularına girmeden "genellikle") gösterilecektir. Ayrıca sorgu/tablo verilerini tazeleme işlemi çoğu zaman için kapatıp açma ile kıyaslandığında daha az veri iletişimi ve daha hızlı çalışacak bir işlem olacaktır.
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen yusuf simsek »

4. Resimde

Siz Önce
Form4.Listele.CLOSE;
Form4.Listele.OPEN;

yapıyor, sonra TABLOYA INSERT ediyorsunuz!!!

Yani Önce tabloyu yeniliyor, sonra kayıt ekiyorsunuz!!!


Önce INSERT işlemi yapınız,

Sonra
Form4.Listele.CLOSE;
Form4.Listele.OPEN;

yaptığınız zaman kayıt Form4 de Gride gelecektir...
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
fatihyegen
Üye
Mesajlar: 19
Kayıt: 08 May 2020 05:20

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen fatihyegen »

Hocam çözüm 1 olarak tavsiye ettiginiz kod blogunu uyguladım fakat 1 kere kayıt eklendikten sonra kayıt eklenmiyor
çözüm 2 olarak söylediginiz kod blogunu kayıt eklendikten sonra ki yere koyma olayını da denedim fakat çalışmadı projemi bir kontrol edin
belki benim gözden kaçırdıgım bir şey vardır

projem : https://drive.google.com/open?id=1wJaWW ... 5rGomWj9Dj
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen ertank »

Yaptığınız yanlış şu, Projenizde veritabanı bağlantısı için ADOConnection bileşeni bir taneolması yeterli. Siz her bir formun üzerine ayrı ayrı eklemiş ve her bir bağlantıyı kendi içinde yapmışsınız.

Bu hem kaynak hem performans açısından yanlış.

Form3 içindeki "kayitol" bileşeninin Connection özelliğini Form1.ADOConnection1 yapabilirsiniz. Aynı şekilde form3 içindeki AdoTable1 bileşeninin Connection özelliğini de Form1.ADOConnection1 yapabilirsiniz.

Benzer şekilde diğer formları da Form1 üzerindeki bağlantıyı kullanacak şekilde düzenleyebilirsiniz. Eğer Connection listesinde Form1.ADOConnection1 gözükmüyor ise ünite kod kısmında "implementation" satırından sonraki uses kısmına "telefon" ünitesini ekler iseniz bundan sonra görecektir. Bazen bu değişikliği yaptıktan sonra üniteyi kapatıp açmak gerekebiliyor.

İleriye dönük olarak, Bütün formların Form1 kullanması yerine bu amaca hizmet eden DataModule kullanabilirsiniz. (File -> New -> Other -> Delphi -> Database seçildiğinde sağ tarafta gözükecektir) Böylece tüm formlar veri işlemlerini tek noktadan yapıyor olacaklardır.

Bu arada, eğer uygulama ikinci derlemede hata veriyor dediğiniz proje bu ise buradaki hatanız;
- Ana form kapanmadan uygulama kapanmaz. Bu Windows işletim sisteminin getirdiği bir zorunluluk.
- Delphi projelerinde genelliikle ana form uygulama çalıştığında karşınıza çıkan ilk form oluyor. Sizin projeniz için bu Form1
- Uygulama kapatmak için buton koymuşsunuz, ancak buton altında kod yok.
- Ekrandaki açık pencereyi çarpıdan kapatınca ekranda gösterilen form kapatılıyor (Hide oluyor) ancak ana form da arka planda Hide şeklinde çalışmaya devam ediyor. Dolayısıyla proje sonlanmıyor.

Çözüm olarak önerebileceğim;
Form1.OnClick olayının kodunu aşağıdaki şekilde değiştirin.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Close ;
  ADOQuery1.SQL.Text :='select * from  kullanicilar where kadi='+#39+kadi.Text+#39+' and ksif='+#39+sifre.Text+#39;
  ADOQuery1.Open;

  if ADOQuery1.RecordCount >0 then
  begin
    try
      Form1.Visible:= False;
      Form4.ShowModal();
    finally
      Close();
    end;
  end;
end;
Son olarak, uygulamaya kullanıcı adı ve şifre ile giriş yapıldığında eski kayıtlar görterilmiyor. Bunu düzeltmek için Form4.OnShow() olayına aşağıdaki gibi bir kod yazabilirsiniz.

Kod: Tümünü seç

procedure TForm4.FormShow(Sender: TObject);
begin
  listele.Open();
end;
fatihyegen
Üye
Mesajlar: 19
Kayıt: 08 May 2020 05:20

Re: Dbgritteki veri eklendiginde gözükmüyor

Mesaj gönderen fatihyegen »

Verdiginiz bilgiler için teşekkür ederim hocam dediklerinizi uyguladım düzeldi
Cevapla