Birden fazla editbox ile sorgulama

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
apachi2006
Üye
Mesajlar: 6
Kayıt: 06 Kas 2015 07:49

Birden fazla editbox ile sorgulama

Mesaj gönderen apachi2006 »

Sa. Arkadaşlar. Formumuzda diyelimki 3 tane editbox var. Databasemizde de aynı tabloda 3 ayrı sütun var. A,B,C
Editbox1 A
Editbox2 B
Editbox3 C

Bu sorgulamanın sql kodunu nasıl yazarım. Teşk.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Birden fazla editbox ile sorgulama

Mesaj gönderen mrmarman »

Merhaba.

- Bu soru genel ve sık gelen bir sorudur, ortak bir cevap vereceğim. Daha sonra bu cevabı göremeyenler için benzeri sorular gelirse burayı referans göstereceğim.

- Şimdi sana iki seçenek sunacağım.
(1) Edit'lerin boş iken tüm kayıtları gösteren, Edit'lere giriş yaptıkça filtrelenen hali.
(2) Edit'lerin boş iken sadece tablo başlıkları görünen ama hiçbir kayıt göstermeyen, herhangi bir Edit'e giriş yapmanı bekleyen hali.

- Başlığı okuyanlar için (=) eşittir işareti yerine LIKE kullanımına ilişkin bilgi tazelemesi yapayım, % işareti arayacağın terimin sonunda ise başlangıcı Edit'lere girdiğin ve sonunda ne olursa yani joker anlamındadır.

Kod: Tümünü seç

'ar%' dersen 'ar' ile başlayanlar
'%ar' dersen sonu 'ar' ile bitenler
'%ar%' dersen içinde herhangi bir yerinde 'ar' geçenler anlamındadır.
(1)

Kod: Tümünü seç

     SQL.Clear;
     SQL.Add('SELECT A,B,C FROM Tablo  ');
     SQL.Add('WHERE 1=1');
       if Trim(EditBox1.Text) <> '' then SQL.Add('AND PL_Donem  like ' + QuotedStr(EditBox1.Text + '%') );
       if Trim(EditBox2.Text) <> '' then SQL.Add('AND PL_Adi    like ' + QuotedStr(EditBox2.Text + '%') );
       if Trim(EditBox3.Text) <> '' then SQL.Add('AND PL_Soyadi like ' + QuotedStr(EditBox3.Text + '%') );
     SQL.Add('ORDER BY T1.O_KayNo');
     Active := True;
Böylece her üçü de boş ise tüm kayıtları, herhangi bir dolu ise dolu olanlar kadar filtrelenmiş kayıtları görürsün.

(2)
- Eğer dersen ki hepsi boşsa hiç kayıt gelmesin, doldurdukça ilgili kayıt varsa gelsin o zaman 1=1 yerine 1=0 yapıp AND olanları OR parantezine almak yeterli.

Kod: Tümünü seç

     SQL.Clear;
     SQL.Add('SELECT A,B,C FROM Tablo  ');
     SQL.Add('WHERE 1=0');
     if ( Trim(EditBox1.Text) <> '' ) OR ( Trim(EditBox2.Text) <> '' ) OR (Trim(EditBox3.Text) <> '') then
     begin
       SQL.Add('OR ( 1=1');
       if Trim(EditBox1.Text) <> '' then SQL.Add('AND PL_Donem  like ' + QuotedStr(EditBox1.Text + '%') );
       if Trim(EditBox2.Text) <> '' then SQL.Add('AND PL_Adi    like ' + QuotedStr(EditBox2.Text + '%') );
       if Trim(EditBox3.Text) <> '' then SQL.Add('AND PL_Soyadi like ' + QuotedStr(EditBox3.Text + '%') );
       SQL.Add(')');
     end;
     SQL.Add('ORDER BY T1.O_KayNo');
     Active := True;
Resim
Resim ....Resim
apachi2006
Üye
Mesajlar: 6
Kayıt: 06 Kas 2015 07:49

Re: Birden fazla editbox ile sorgulama

Mesaj gönderen apachi2006 »

Çok teşekkürler mrmarman, verdiğin kodlar işimi gördü.
Cevapla