Query de DBGrid i kayıtları arasında klavyeden ulaşma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Query de DBGrid i kayıtları arasında klavyeden ulaşma
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.
- 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.
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
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;
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
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.

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.
Merhaba,
kusura bakmayın, genelde aynı yöntemleri destekledikleri için bakmadan yazdım
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.
kusura bakmayın, genelde aynı yöntemleri destekledikleri için bakmadan yazdım

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.
''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