Master_Detay tabloda IBDataSet_like

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Master_Detay tabloda IBDataSet_like

Mesaj gönderen haydarxxx »

Master_Detay tablomda
IBDataSet (namesi QRY_OGRENCI) ile ilişkilendiridiğim master tablomun verilerini QRY_OGRENCI bağladığım dbgirid de kayıtları görüyorum.
ve bir edit içindeki koşulla göre aratmak için IBQuery de

Kod: Tümünü seç

procedure TForm1.Edit3Change(Sender: TObject);
var
a,kosul:string;
b:integer;
begin
kosul:=('where ADI_SOYADI like '''+edit3.text+'%''');
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select * from TBL_OGRENCI');
IBQuery3.SQL.Add(kosul);
IBQuery3.Open;
a:=QRY_OGRENCI.fieldbyname('ADI_SOYADI').asstring;
b:=QRY_OGRENCI.fieldbyname('KURS_NO').asinteger;
QRY_OGRENCI.Locate('ADI_SOYADI;KURS_NO', varArrayOf([a, b]), [loCaseInsensitive,loPartialKey]);

end;
query kullanıyorum ama dbgrid im query ye bağlı olmadığı için çekilen kaydı göstermiyor (haliyle dbgrid im querynin datasorce üne bağlı olmadığı için.)
Sende oraya bağla diyebilirsiniz ama bu seferde detay kayıtlarını göstermiyor IBDataSet üzerinden kayıt nasıl aratırabilirim.Başka bir dbgrid kullanmadan IBDataSet e bağlı dbgrit te kayıt ı arattığımda yanlız o kaydı getirsin istiyorum.

Kodları [ code ] [ /code] içinde yazalım. rsimsek
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

1. LIKE yerine CONTAINING

Kod: Tümünü seç

select * from tablo_adi where alan_adi containing 'aranan'
şeklinde de kullanabilirsin.

2. LOCATE de arama yaptığın alanlar Indeksli mi? Ayrıca verdiğin parametrelere göre mesela birincisinde büyük/küçük harf ayrımına duyarlı olsun istemişsin :!:

3. IBDataSet in SelectSQL cümleciğini parametrik yaparsan doğrudan aradığın kayıt gelecektir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

rsimsek teşekkür ediyorum
1.

Kod: Tümünü seç

procedure TForm1.Edit3Change(Sender: TObject);
var
a:string;
b:integer;
begin
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select * from TBL_OGRENCI where ADI_SOYADI CONTAINING  '''+edit3.text+'''');
IBQuery3.Open;
a:=QRY_OGRENCI.fieldbyname('ADI_SOYADI').asstring;
b:=QRY_OGRENCI.fieldbyname('KURS_NO').asinteger;
QRY_OGRENCI.Locate('ADI_SOYADI;KURS_NO', varArrayOf([a, b]), [loCaseInsensitive,loPartialKey]);
olarak yaptım fakat QRY_OGRENCI(Ibdataset) e bağlı dbgrid te bir değişiklik olmadı yani edit3 de aranan kayıt gelmedi.Hala sql olarak kayıt araması yapıyor. :? Brnim isteğim Ibdataset üzerinden arana kayıt dbgrid te süzülsün istiyorum ve hali ile bu kayıtla iligili db editler ve detay bilgileride süzülecek.

2. LOCATE de arama yaptığın alanlar Indeksli değil
3. IBDataSet in SelectSQL cümleciğini parametrik nasıl yapılıyor :!: :?: [/code]
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

IBQuery3.SQL.Close;
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('SELECT * FROM TBL_OGRENCI WHERE ADI_SOYADI CONTAINING  ''' + trim(edit3.text) + '''');
IBQuery3.Open; 
Bu şekilde yaptığında çalışıyor olması lazım.
Parametrik dediğim olay da şudur;

Kod: Tümünü seç

IBQuery3.SQL.Close;
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('SELECT * FROM TBL_OGRENCI WHERE ADI_SOYADI CONTAINING  :Aranan');
IBQuery3.ParamByName('Aranan').AsString := trim(Edit3.Text);
IBQuery3.Open;
şeklinde yapmak.

Bu olayı Edit in OnChange ında yazman sürekli tetikleme yapacağından çok sayıda kayıt olduğunda sıkıntı yapabilir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

rsimsek çok teşekkür ediyorum işimi gördü.eksik olma başımızdan :)
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sizden de Allah razı olsun :)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla