SQL FİLTRELEME

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
loxka
Üye
Mesajlar: 214
Kayıt: 18 Ağu 2003 01:10

SQL FİLTRELEME

Mesaj gönderen loxka »

Sql'de filtreleme konusunda bu zamana kadar belki benim gibi sıkıntı çeken arkadaşlar olmuştur diye düşünerek bunu paylaşmak istedim.
Bu sıkıntıyı aşmamda benden sabrını esirgemeyen mrmcop'a çok teşekkür ederim. Aşağıdaki alıntılarda yine kendisinin bana gönderdiklerinden...
Birden fazla kullanılıyorsa eğer, mesela vereceğim örnek 10 alanlı..

İlk yapılması gereken bir Procedure tanımlamak.Yani;

Kod: Tümünü seç

type 
........ 
Procedure SorguHazirla( AlanAdı1, AlanAdı2, AlanAdı3, AlanAdı4, AlanAdı5, AlanAdı6, AlanAdı7, AlanAdı8, AlanAdı9, AlanAdı10: String 
gibi.. 
Şimdi sıra editlerin onchange özelliğine
tanımlanan bu procedureden sonra derlemeye geldi sıra

Kod: Tümünü seç

Procedure Tform3.SorguHazirla( AlanAdı1, AlanAdı2, AlanAdı3, AlanAdı4, AlanAdı5, AlanAdı6, AlanAdı7, AlanAdı8, AlanAdı9, AlanAdı10: String); 
begin 
AlanAdı1 := Trim(Adı1);// Bu alanlara farklı isimlerde verebilirsiniz 
AlanAdı2 := Trim(Adı2);//Yada alan adıyla aynı ismi de yazabilirsiniz 
AlanAdı3 := Trim(Adı3); 
AlanAdı4 := Trim(Adı4); 
AlanAdı5 := Trim(Adı5); 
AlanAdı6 := Trim(Adı6); 
AlanAdı7 := Trim(Adı7); 
AlanAdı8 := Trim(Adı8); 
AlanAdı9 := Trim(Adı9); 
AlanAdı10 := Trim(Adı10); 
Query1.Active := False; 
Query1.SQL.Clear; 
Query1.SQL.Add('Select * from giris'); 
Query1.SQL.Add('Where (1=1)'); 

If Adı1 <> '' 
then Query1.SQL.Add( 'AND (LOWER(Adı1) Like LOWER("%'+AlanAdı1+'%" ))' ); 
If Adı2 <> '' 
then Query1.SQL.Add( 'AND (LOWER(Adı2) Like LOWER("%'+AlanAdı2+'%"))' ); 
If Adı3<> '' 
then Query1.SQL.Add( 'AND (LOWER(Adı3) Like LOWER("%'+AlanAdı3+'%" ))' ); 
If Ameliyat <> '' 
then Query1.SQL.Add( 'AND (LOWER(Adı4) Like LOWER("%'+AlanAdı4+'%"))'); 
.................... 
(10'uncu alana kadar bu işlem aynen böyle devam ediyor ve...) 
Query1.Active := True; 

end; 

Kod: Tümünü seç

procedure TForm3.Edit1Change(Sender: TObject); 
begin 
SorguHazirla(Edit1.Text,Edit2.Text,Edit3.Text,Edit4.Text,Edit5.Text,Edit6.Text,Edit7.Text,Edit8.Text,Edit9.Text,Edit10.Text); 
end; 
diyerek bitiriyoruz .
Bir iki hatırlatma;

-Büyük Küçük harf duyarlı olsun istiyorsanız da LOWER kelimelerini kaldırın. Çünkü arama sırasında her karşılaştıralacak alanı küçük harfe dönüştürüp öyle sorguluyor.

- Bir de, Like yerine = işareti koyarsınız.

- Roner Kroner olayı; ALi yi araken SALİH' lerinde gelmesi...;

- % işaretlerini kaldırdığında, sadece yazdığın kelime mevcutsa cevap gelir.

- Kelimenin sadece başında % işarteti olur, sonda olmaz ise Roner Kroner ikisi de gelir ama Ronerli gibi bir kelime gelmez.

- Kelimenin sadece sonunda % işareti olursa, Roner istediğinde Kroner gelmez ama Ronerli gibi bir kelime gelir.

- Anlaşıldığı üzere % işareti öncesini ve sonrasını tamamlar şekilde benzer kelimeleri bulur.
hepsi bu...
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

dongu

Mesaj gönderen safak »

Bu yaklaşım bir döngü içerisinde ifade edilebilir miydi ?
Kolay Gelsin,
Cevapla