Dbgritteki veri eklendiginde gözükmüyor
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Dbgritteki veri eklendiginde gözükmüyor
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
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
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
Re: Dbgritteki veri eklendiginde gözükmüyor
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
Kullandığınız query.Connection bileseni AutoCommit özelliği akti mi? kontrol eder misiniz
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: Dbgritteki veri eklendiginde gözükmüyor
Auto commiti bulamadım fakat şu ifade aktif autocalcfields
Re: Dbgritteki veri eklendiginde gözükmüyor
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.
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.
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();
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: Dbgritteki veri eklendiginde gözükmüyor
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
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
Re: Dbgritteki veri eklendiginde gözükmüyor
Çö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.
Çö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.
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;
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.
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
Re: Dbgritteki veri eklendiginde gözükmüyor
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...
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...
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: Dbgritteki veri eklendiginde gözükmüyor
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
çö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
Re: Dbgritteki veri eklendiginde gözükmüyor
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.
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.
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;
Kod: Tümünü seç
procedure TForm4.FormShow(Sender: TObject);
begin
listele.Open();
end;
-
- Üye
- Mesajlar: 19
- Kayıt: 08 May 2020 05:20
Re: Dbgritteki veri eklendiginde gözükmüyor
Verdiginiz bilgiler için teşekkür ederim hocam dediklerinizi uyguladım düzeldi