SQL FİLTRELEME
loxka05.02.2004 - 08:34:05
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;
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
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;


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...
 
safak07.03.2004 - 23:10:56
Bu yaklaşım bir döngü içerisinde ifade edilebilir miydi ?
Kolay Gelsin,
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com