Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
DBGrid Refresh Sorunu
#1
Merhabalar;

Access veritabanından DBGride verileri okuyorum. Veritabanında değişiklik yapıldığında Timer içeririsine yerleştirmiş olduğum, Refresh komutu ile veriler yenileniyor. Buraya kadar sorun yok. Sorun şu ki, Yeni eklediğimde DbGride yeni kayıt listelenmiyor. Çözüm olarak
refresh komutu altına (ADOQuery1.Requery(); ) komutunu kullandım. Bu şekilde veriler geliyor. 

Yeni sorun ise Dbgridte scroll çubuğu sürekli üste geliyor.

procedure TForm1.Timer1Timer(Sender: TObject);
begin

ADOQuery1.Refresh;

end;

2ng4q15.JPG


ly9sv7o.JPG
Öneri, fikir ve yardımlarınız için şimdiden teşekkür ederim..
Cevapla
#2
Merhaba,
Requery ile zaten çözmüşsünüz. 
Requery den sonra Adoquery1.last; yaparsanız istediğiniz olur herhalde.
Cevapla
#3
İlginizden dolayı teşekkür ederim.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ADOQuery1.Requery();
ADOQuery1.Last;
ADOQuery1.Refresh;
end;

Bu şekilde yaptığım zaman;
Örneğin DbGrid tablosundaki 3.satırı seçtiğimde timer süresi sonunda seçtiği satıra değil sonuncu satıra gidiyor. 100 satır olduğunu varsayalım, 4. satırı incelerken timer sonunda 100. satıra gidiyor. Bu şu demek seçmek istediğim satırı seçiyor olabilsem de timer sonunda liste güncellenirken seçmek istediğim satırı seçemiyorum.
Cevapla
#4
Bookmark olayını araştırın.
Cevapla
#5
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ADOQuery1.Requery();
ADOQuery1.Last;
ADOQuery1.Refresh;
end;

Doğru çözüm bookmark kullanmak daha basit olarak Yukardaki kodu

procedure TForm1.Timer1Timer(Sender: TObject);
var
gecici_kayit:integer;
begin
ADOQuery1.Requery();
gecici_kayit:= ADOQuery1.Recno; // şu an mevcut kayıt numarası
ADOQuery1.Last; // yeni kayıtı göstermek için son kayda git 
ADOQuery1.Recno:=gecici_kayit;  // son konunlanan kayıda git
ADOQuery1.Refresh;
end;

Not :  sürekli bu işi yapmak mantıksız ve eziyetli.
adosorgusu nun event özelliklerinde insert,  onchange gibi olaylarını inceleseniz.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
İlginizden dolayı çok teşekkür ederim.

procedure TForm1.Timer1Timer(Sender: TObject);

var
Satir:TBookmark;
begin

if ADOQuery1.Active and not ADOQuery1.isEmpty then begin
  try
    Satir:=ADOQuery1.BookMark;
    // Buraya kodlarını yaz
    ADOQuery1.Requery();
    if Satir<>nil then
     ADOQuery1.BookMark:=Satir;
  except
    ADOQuery1.Last;
  end;
end;
end;


Bookmark ile sorunu çözüldü..Tavsiyelerinizden dolayı çok teşekkür ederim..
(Dbgrid + AdoQuery + bookmark)
(Dbgrid + AdoQuery + refresh)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Photo Sqlite Database Veri Sorunu apachi2006 2 74 25-07-2021, Saat: 00:33
Son Yorum: apachi2006
  Postgresql date alan ekleme sorunu barissagir 7 1.224 22-01-2021, Saat: 00:00
Son Yorum: barissagir
  Sqllite Dosya Boyutu Sorunu pro_imaj 9 4.532 09-03-2019, Saat: 10:46
Son Yorum: pro_imaj
  Tek Seferde İlişkili Tüm Tablolarda Güncelleme Sorunu [ÇÖZÜLDÜ] SenayAkgun 15 7.408 22-02-2019, Saat: 21:14
Son Yorum: adelphiforumz
  İnterbase to go bağlanma sorunu yazilimcikiz 38 14.674 10-01-2019, Saat: 11:46
Son Yorum: yazilimcikiz



Konuyu Okuyanlar: 1 Ziyaretçi