Query de DBGrid i kayıtları arasında klavyeden ulaşma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
yildiz
Üye
Mesajlar: 6
Kayıt: 26 Haz 2003 05:36
Konum: ist

Query de DBGrid i kayıtları arasında klavyeden ulaşma

Mesaj gönderen yildiz »

Formumda Query ve DBGrid kullnıyorum DBGrid de oluşturulan alanlar va bu alanları sql le istedigim DBGrid kolonuna göre sıralayabiliyorum.Fakat ben eğer klavyeden C harfine basıldığında direk C ile Başlayan kayda gitmesini veya C den Sonra E harfine basıldığında CE yle başlayan kayda gitmesini. Bu arada Diğer Kayıtlarında ekrenda gözükmesini istiyorm. Yani CA ile başlayan A ile başlayanlarda ekranda klacaklar bunu nasıl yapabilrim.

- ayrıca formuma ekeldiğim üç babolm var bunlar master le birbirlerine bağlanmış. birinci table me yeni bir sanal alan ekliyorum bu alanı lookupla diger table bağlıyorum fakat DBGrid de eklediğim sanal alanı gosterdiğimde yalnızca brinci kayıda ikinci tablodan eklediğim bilgi geliyor
diğer satırlara gelmiyor bunu nasıl hallederim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Merhaba, Formun OnShow unda içeriğini boş olarak atadığın global bir değişkenin olsun. (var içinde tanımla st: string; gibi)

daha sonra DBGrid in OnKeyDown un da

Kod: Tümünü seç

begin
   if (Key = 8) and (length(st) > 0) then // backSpace
    st := copy(st, 1, length(st) - 1)
  else
  if (Key >= 32)  and (Key < 122) then // geçerli karakter kümesi.
  begin
    st := st + chr(Key);
    Table1.FindNearest([st]); // en yakın kayıta konumlan. dikkat edilecek husus; indeks in o alana göre seçilmiş olması.
  end;
  // hatta bunu formun biryerlerinde de görüntüleyebilirsin.
  Label1.Caption := st; // yada edit1.text aynı olayı edit in onchange ında da yapabilirsin.  
  Key := 0;
end;
yildiz
Üye
Mesajlar: 6
Kayıt: 26 Haz 2003 05:36
Konum: ist

Mesaj gönderen yildiz »

Verdiğin bilgi için sağol ama ben bunu Query1 üzerinde yapmak istemiştim. Yani sql de Select komutu ile açtığım Tabel ler üzerinde.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

o zaman Table bir gördüğün yerlere Query'nin ismini yaz. Query1... gibi.

Kolay gelsin.
yildiz
Üye
Mesajlar: 6
Kayıt: 26 Haz 2003 05:36
Konum: ist

Mesaj gönderen yildiz »

Soylemis olduğunuz şeyi başaramadım cünkü Query1 FindNearst komutunu kabul etmiyor.Bundan Vazgeçtim

Bana gonderdiğim formda - işaretinden sonra yazdığım konuda yardımcı olabilrmisiniz. Teşekkürler
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

doğru query de findkey ve findnearest yordamları yok onun yerine locate var. aşağıdaki şekilde kullanabilirsin. helpten kesip yapıştırıyorum:)) aslında f1 deyip sizde ulaşabilirdiniz ya hadi neyse :lol:

Query1.Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);

burada önemli olan sondaki [loPartialKey] dir. yani benzer ilk kayıda konumlan anlamında.

tek bir indeks varsa;
Query1.Locate('Adi', st, [loPartialKey]); şeklinde de verebilirsin..

kolay gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

kusura bakmayın, genelde aynı yöntemleri destekledikleri için bakmadan yazdım :oops:

Recep abinin dediği locate yöntemini kullanabilirsiniz. Locate aynı zamanda indeksleri desteklediği için daha hızlı çalışır. Ancak söylediğiniz yöntem her seferinde arama yapacağı için çok kayıt olduğu zaman yavaş çalışabilir.

Ben aramalarımı ayrı bir form oluşturup, Query ile bulduruyorum. Daha sonra Locate ile kayıta konumlanıyorum.

Ayrıca 3. parti bileşen olan Quantum Grid ( http://www.devexpress.com ) bu işlemi direk destekliyor.

2. Lookup alan yerine calculated alan yapın ve OnCalcFields'da aşağıdakine benzer bir kodla buldurun.

DataSet.FindField( 'PRODUCT_TITLE' ).Value := ADS_Products.Lookup( 'ID', DataSet.FindField('PRODUCT_ID' ).Value, 'TITLE' );

Kolay gelsin.
Kullanıcı avatarı
kimene
Üye
Mesajlar: 78
Kayıt: 28 Haz 2003 02:39
Konum: İstanbul

Mesaj gönderen kimene »

''Ayrıca 3. parti bileşen olan Quantum Grid ( http://www.devexpress.com ) bu işlemi direk destekliyor.'' demişssin MusSimsek. nasıl olduğunu açıklarmısın
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Incremental Search özelliğinden bahsediliyor. Bunu açtığınızda basılan tuşa göre kolon üzerinde konumlanır ve bulunanı boyar.
Cevapla