| loxka | 05.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... | |
| safak | 07.03.2004 - 23:10:56 |
| Bu yaklaşım bir döngü içerisinde ifade edilebilir miydi ?
Kolay Gelsin, | |