Dbgrid + AdoQuery + bookmark

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

Merhaba arkadaşlar,

bir prosedür yardımı ile timer bileşeni üzerinden istediğim kayıtları ado query ile her 2 dakikada bir listeletiyorum. ancak; listeleme her yapıldığında grid üzerindeki ilkkayda gidiyor. ben grid üzerinde en son bulunduğum kayıtta olmak istiyorum. yani her listelemede ben en son hangi kayıt üzerindeysem yine o kayıt üzerinde olmak istiyorum. bunun için bookmark kullanayım dedim ama o da bookmarkta her seferinde gridteki ilk kaydı baz alıyor.

bu konuda bana yardımcı olabilir misiniz lütfen?

teşekkür ederim.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen aslangeri »

s.a.
getbookmark
gotobookmark
:ara
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

şimdi ben soruyu yeniden okudum da anlatmak istediğimi tam anlatamamışım. benim sıkıntım bookmarka almak istediğim kayıt her seferinde tablonun ilk kaydı oluyor. değeri label'a yazdırdım. her seferinde gridin hangi hücresine tıklarsam tıklayayım hep aynı değer, ilk kaydın değeri çıkıyor. dolayısıyla da bookmark olarak hep ilk kaydı işaretliyor.

yani sorunun özü grdin seçilen hücre değerini bulmakta.
formlar arasında gridlerden bilgi alış verişi yapabiliyorum. normal şartlarda

Kod: Tümünü seç

dbgrid.datasource.dataset.fieldbyname('alan').asstring 
ile de istediğim değeri alabiliyorum. ama bu formda olmuyor. prosedür ise şu şekilde.

Kod: Tümünü seç

procedure TfrmDispanel_calisan.RandevuGoster(doktor, servis,
  tarih: string);
begin
  with sorguHastalar do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT (TABLO.HASTAADI+'+CHR(39)+' '+CHR(39)+'+TABLO.HASTASOYADI) AS RANHASTA, Randevu.Saat, SERVISLER.SLT AS RSERVIS, doktor.SLT AS RDOKTOR, Randevu.ranDURUM, Randevu.ranID FROM Randevu');
    SQL.Add(' LEFT JOIN TABLO ON Randevu.Hasta=TABLO.TCKIMLIKNO LEFT JOIN SERVISLER ON Randevu.Servis = SERVISLER.SLB LEFT JOIN doktor ON Randevu.Doktor = doktor.SLB');
    SQL.Add(' WHERE (Convert(varchar(10),Randevu.Tarih,104) = '+chr(39)+tarih+chr(39)+') AND (Randevu.Servis='+chr(39)+servis+chr(39)+') AND (Randevu.Doktor='+chr(39)+doktor+chr(39)+') ORDER BY Randevu.ranID');
    If Active = false then Active:=true;
    Open;
  end;
end;
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen aslangeri »

kodu şu şekilde denedinizmi?

Kod: Tümünü seç

    procedure TfrmDispanel_calisan.RandevuGoster(doktor, servis,
      tarih: string);
var bk:TBookmark;
    begin
      with sorguHastalar do
      begin
bk:=getbookmark;
        Close;
        SQL.Clear;
       ...........        
        If Active = false then Active:=true;
        Open;
gotobookmark(bk);
      end;
    end;
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

yanıt biraz geç oldu ama maalesef bu da olmadı.

bir de kendimce şu şekilde bir mantık yürütüp onu denedim:

bk adında globak bir TBookmark değişkeni tanımladım. dbgrid'in cellclick olayında tıklanan değeri bookmark ettim. sonra prosedüre sorgudan sonra bookmarka git dedim yine yapmadı. şimdi bir de prosedür çalıştıktan sonra gotobookmark deniyorum o da olmadı. ama şöyle bir sorun farkettim.

ben burada iki ayrı form kullanıyorum birinci form kullanıcı ekranında ikinci form ise dışarıda yani ikinci ekranda gösteriliyor. kullanıcı kendi ekranındaki dbgride tıkladığından dış ekranda labelda tıklanılan hücredeki istenilen veri gösteriliyor.

kontrol için iç ekrana da bir label koydum. burada

Kod: Tümünü seç

label1.caption:=sorguHastalar.FieldValues['RANHASTA']
dediğimde sadece ilk tıklama gösteriyor diğerleri göstermiyor. ama dış ekran için ise

Kod: Tümünü seç

dbgrid1.DataSource.dataset.fieldbyName('RANHASTA').AsString;
olarak yazıyorum bu normal çalışıyor.

peki ben burada datasource.dataset.fieldbyname('alanadi').Asstingi bookmarka nasıl atayabilirim?
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen Battosai »

timer kodunu aşağıdaki gibi değiştir..belirtiğim alana işlem yapan kodlarını yaz.

Kod: Tümünü seç

var
 Satir:TBookmark;
begin
  if Query.Active and not Query.isEmpty then begin
    try
      Satir:=Query.BookMark;
      // Buraya kodlarını yaz
      if Satir<>nil then
       Query.BookMark:=Satir;
    except
      Query.Last;
    end;
 end;
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

teşekkür ederim ama query.bookmark bende hata veriyor. ( Adoquery'de bookmark diye kullanabilecğeim bir şey yok). ben biraz daha kurcalıyorum bakalım bir şeyler olursa yine haber veririm ...
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen Battosai »

sarp_halit bookmark yok ise başka birşey vardır ama aklıma başka bir yöntem geldi. Mutlaka tekil bir ID alanın vardır AdoQuey de( Olması lazım :) ) Şimdi sana gönderdiğim kodda bookmark yerine bu ID değerini integer değişkene aktar sonra işlem bittikten sonra Locate ile istenilen kayda konumlan....bu sefer oldu galiba :)
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen conari »

Kod: Tümünü seç

var
  Bookmark: TBookmarkStr;
  Total: Double;
begin
  Bookmark := Cds.Bookmark;
  try
    cds.DisableControls;
    Total := 0;
    try
      cds.First;
      while not cds.EOF do
      begin
        Total := Total + cdsSalary.Value;
        cds.Next;
      end;
    finally
      cds.EnableControls;
  end
  finally
    cds.Bookmark := Bookmark;
  end;
  MessageDlg ('Total ' +
    Format ('%m', [Total]), mtInformation, [mbOK], 0);
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen aslangeri »

s.a.
bana kalırsa sıkıntı bookmarklarda değil.
@sarp_halit arkadaşımızın kodlama tekniğinde.
query ile seçtiği kayıtları hangi bileşen(ler)de nasıl gösteriyor. soruda eksik kalan bişeyler var gibi geliyor.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

@conari öncelikle mesajın için teşekkür ederim ancak; kullandığım veritabanı işyerinde olduğundan şimdi deneme şansım yok. ama yarın dener sonucunu paylaşırım.
@aslangeri: proje bir randevu sistemi ile ilgili. internetten ya da programdan girilen kayıtlar hem doktor ekranında hem de dış ekranda gösteriliyor. sorgu bir prosedüre bağlı ve her ikisi de dbgrid üzerinde gösteriliyor. timer nesnesi her 60 sn de bir prosedürü çağırıyor. tabi prosedür çalışınca doğal olarak ilk kayda gidiyor. benim amacım ise: timer her tetiklediğinde en son hangi hastada isem cursorun yine o hasta üzerinde kalması. ama senin dediğin gibi sanırım benim kodlama mantığımda bir sıkıntı var; çünkü dbgrid'in oncellclick olayında ranID değerini göstermek istiyorum ama ulaşamıyorum. sanırım bookmark etmemesinin de sebebi bu olsa gerek.

ben yarın bu prosedürü bir kez daha gözden geçireyim ama kayıtların listelenmesinde herhangi bir sorun yok gibi geliyor. otokontrolde her zaman fayda vardır değil mi? :D

paylaşımınızdan ve yardımlarınızdan dolayı hepinize teşekkür ederim.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen aslangeri »

bookmark işlemlerini kayıtları güncellediğiniz yerde yapmanız lazım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen orhancc »

aktif satırın id sini alıp daha sonra da o satıra locate ettireceksiniz. Hangi gridi kullanıyorsunuz bilmiyorum ama bazılarının istenen satıra gitme özelliği var.
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen sarp_halit »

daha önce de dediğim gibi aktif satırın idsini label a yazdırmak istediğimde sadece ilk satırınkini alıyor. o yüzden de bookmark olarak da ilk satırı görüyor. sorun da buradan kaynaklanıyor zaten. normal dbgrid kullanıyorum. ( delphi ile gelen )

aynı projede belki 20 tane dbgrid ile işlem yaptım ama bu sorun sadece bu formda oldu. neden bu şekilde bir işlem yaptı anlamadı :(

prosedürün kodu yukarıda var ama inceleme için bir kez daha vereyimÇ

Kod: Tümünü seç

procedure TfrmDispanel_calisan.RandevuGoster(doktor, servis,
  tarih: string);
begin
  with sorguHastalar do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT webRANDEVU.ranID, webRANDEVU.ranDURUM, webRANDEVU.drDURUM, webRANDEVU.Saat, (ADRES.HASTAADI+'+CHR(39)+' '+CHR(39)+'+ADRES.HASTASOYADI) AS RANHASTA, SERVISLER.SLT AS RSERVIS, doktor.SLT AS RDOKTOR FROM webRANDEVU');
    SQL.Add(' LEFT JOIN ADRES ON webRANDEVU.Hasta=ADRES.TCKIMLIKNO LEFT JOIN SERVISLER ON webRANDEVU.Servis = SERVISLER.SLB LEFT JOIN doktor ON webRANDEVU.Doktor = doktor.SLB');
    SQL.Add(' WHERE (Convert(varchar(10),webRANDEVU.Tarih,104) = '+chr(39)+tarih+chr(39)+') AND (webRANDEVU.Servis='+chr(39)+servis+chr(39)+') AND (webRANDEVU.Doktor='+chr(39)+doktor+chr(39)+') ORDER BY webRANDEVU.ranID');
    If Active = false then Active:=true;
  end;
end;
timer her bir dakikada bir bu prosedürü çağırıyor. ama benim esas sorunum bookmarktan ziyade id alanını alamamaktan kaynaklanıyormuş; çünkü her seferinde ilk satırın id numarasını alabiliyorum.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Dbgrid + AdoQuery + bookmark

Mesaj gönderen Battosai »

Verdiğin procedure içinde şunu yap dediğimiz bir kod bulunmuyor...Aşağıdakini dene

Kod: Tümünü seç

procedure TfrmDispanel_calisan.RandevuGoster(doktor, servis,
  tarih: string);
var
ID:integer;
begin
ID:=sorguHastalar.FieldbyName('ID').Asinteger;
  with sorguHastalar do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT webRANDEVU.ranID, webRANDEVU.ranDURUM, webRANDEVU.drDURUM, webRANDEVU.Saat, (ADRES.HASTAADI+'+CHR(39)+' '+CHR(39)+'+ADRES.HASTASOYADI) AS RANHASTA, SERVISLER.SLT AS RSERVIS, doktor.SLT AS RDOKTOR FROM webRANDEVU');
    SQL.Add(' LEFT JOIN ADRES ON webRANDEVU.Hasta=ADRES.TCKIMLIKNO LEFT JOIN SERVISLER ON webRANDEVU.Servis = SERVISLER.SLB LEFT JOIN doktor ON webRANDEVU.Doktor = doktor.SLB');
    SQL.Add(' WHERE (Convert(varchar(10),webRANDEVU.Tarih,104) = '+chr(39)+tarih+chr(39)+') AND (webRANDEVU.Servis='+chr(39)+servis+chr(39)+') AND (webRANDEVU.Doktor='+chr(39)+doktor+chr(39)+') ORDER BY webRANDEVU.ranID');
   Open;
  end;
sorguHastalar.Locate('ID',ID,[]);
end;

Cevapla