Table1 Çoklu Filtreleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Nomercy
Üye
Mesajlar: 62
Kayıt: 17 Kas 2014 12:33

Table1 Çoklu Filtreleme

Mesaj gönderen Nomercy »

Arkadaşlar paradox veri tabanında

Adi - Soyadi - Cep - Is - Ev olmak üzere field adı var bir tane editte bunların hepsini filtrelemek için nasıl bir yol izlemeliyim...

Böyle yaparak sadece 1 tanesini filtreliyebiliyorum

Kod: Tümünü seç

Table1.FilterOptions:=[foCaseInsensitive];
        Table1.Filter:='[Adi]='+#39+Edit1.text+'*'+#39;
 if Edit1.text='' then Table1.Filtered:=False
else
 Table1.Filtered:=True;
Bunların hepsini nasıl filtreliyebilirim??

Birde aynı şekilde 1 tane RadioGroup var o da şöyle bunu nasıl yapabilirim? tümünü seçtiğimde tüm kayıtları listeleyecek,Cep seçtiğimde Cep, Ev seçtiğimde Ev ve son olarak İş seçtiğimde İşi listeleyecek...
Resim
En son Nomercy tarafından 15 Oca 2015 08:21 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Table1 Çoklu Filtreleme

Mesaj gönderen warder »

Filter kısmını sql sorgusunun where den sonraki kısmı gibi düşünebilirsiniz.
Aslında tam da öyle çalışıyor. Select kısmı tabloda hazır.. şartlar kısmını Filter özelliğine giriyorsunuz.
Bir fonksiyonda tüm seçenekleri ekleyip String olarak filter özelliğine dönerek çok verimli bir şekilde kullanabilirsiniz.
Size çok eski bir programımdan kısa bir alıntı vereyim. Delphicesi size kalmış.

Kod: Tümünü seç

AnsiString TFrmSor::SorguText()
{
    AnsiString aSorgu = "SAGLIK = 'False' and TRANSFER = 'False'";
    if(!ComboMeslek->Text.IsEmpty()) aSorgu += " and MESLEK    = '" + ComboMeslek->Text + "*'";
    if(!ComboUyruk ->Text.IsEmpty()) aSorgu += " and UYRUK     = '" + ComboUyruk ->Text + "*'";
    if(!ComboDogum ->Text.IsEmpty()) aSorgu += " and DOGUMYER  = '" + ComboDogum ->Text + "*'";
    if(!ComboYas   ->Text.IsEmpty()) aSorgu += " and YASDATA   = '" + ComboYas   ->Text + "*'";
    return aSorgu;
}
//Kullanımı..
    DataMod->TbGenel->Filter = SorguText();
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Nomercy
Üye
Mesajlar: 62
Kayıt: 17 Kas 2014 12:33

Re: Table1 Çoklu Filtreleme

Mesaj gönderen Nomercy »

warder yazdı:Filter kısmını sql sorgusunun where den sonraki kısmı gibi düşünebilirsiniz.
Aslında tam da öyle çalışıyor. Select kısmı tabloda hazır.. şartlar kısmını Filter özelliğine giriyorsunuz.
Bir fonksiyonda tüm seçenekleri ekleyip String olarak filter özelliğine dönerek çok verimli bir şekilde kullanabilirsiniz.
Size çok eski bir programımdan kısa bir alıntı vereyim. Delphicesi size kalmış.

Kod: Tümünü seç

AnsiString TFrmSor::SorguText()
{
    AnsiString aSorgu = "SAGLIK = 'False' and TRANSFER = 'False'";
    if(!ComboMeslek->Text.IsEmpty()) aSorgu += " and MESLEK    = '" + ComboMeslek->Text + "*'";
    if(!ComboUyruk ->Text.IsEmpty()) aSorgu += " and UYRUK     = '" + ComboUyruk ->Text + "*'";
    if(!ComboDogum ->Text.IsEmpty()) aSorgu += " and DOGUMYER  = '" + ComboDogum ->Text + "*'";
    if(!ComboYas   ->Text.IsEmpty()) aSorgu += " and YASDATA   = '" + ComboYas   ->Text + "*'";
    return aSorgu;
}
//Kullanımı..
    DataMod->TbGenel->Filter = SorguText();
Bunu tam anlamadım nasıl yapacam bunu yani yukarıdaki field adlarına göre nasıl bir yol izleyecem?
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: Table1 Çoklu Filtreleme

Mesaj gönderen warder »

sql sorgu olarak filtrenizi nasıl yazarsınız.
select * from tablo where adi = isim and soyadi = soyisim and cep = 123456
şeklinde gider..
programınızda where den sonraki kısmı filter özelliğinde kullanacaksınız. hepsi bu.
Delphide sizin yazdığınıza göre...
Table1.Filter:='[Adi]='+#39+Edit1.text+'*'+#39+' and [Soyadi]='+#39+Edit2.text+'*'+#39+' and [Tel]='+#39+Edit32.text+'*'+#39;
gibi bir durum oluşacak sanırım...
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: Table1 Çoklu Filtreleme

Mesaj gönderen bobasturk »

merhaba,

ben genelde if şartlarını kullanıyorum, biraz uzun gibi oluyor kodlama ama yinede istediğim gibi çılışıyor. örneklersek; eğer (if) radio grupta şu işaretliyse şunları sorgula bu işaretliyse bu sorguyu çalıştır gibi checkbox veya radio grup sayıları kadar kodları aynı şekilde yazıyorum, sadece sorgulama alanları değişiyor. basit ve uzun kod sanırım ama işe yarıyor.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Table1 Çoklu Filtreleme

Mesaj gönderen xxxjedixxx »

Eşittir yerine like kullandım. Böylelikle içinde geçenleri bulabilirsin. Bu örnekte Radiobutton isimlerini rd ile başlattım. % işaretleri like komutu için gerekli.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var FTxt, Val: string;
begin
  Table1.Filtered := False;
  FTxt := ''; 
  Val := '%' + Edit1.Text + '%';  // % işaretlerini * gibi düşünebilirsin.

  if rdTumu.Checked then FTxt := '[Adi] like ''' + Val + ''' or [Soyadi] like ''' + Val +
                               ''' or [Cep] like ''' + Val + ''' or [Is] like ''' + Val +
                               ''' or [Ev] like ''' + Val + '''';
  if rdAdi.Checked then FTxt := '[Adi] like ''' + Val + '''';
  if rdSoyadi.Checked then FTxt := '[Soyadi] like ''' + Val + '''';
  if rdCep.Checked then FTxt := '[Cep] like ''' + Val + '''';
  if rdIs.Checked then FTxt := '[Is] like ''' + Val + '''';
  if rdEv.Checked then FTxt := '[Ev] like ''' + Val + '''';
  Table1.Filter := FTxt;
  Table1.Filtered := True;
end;
Cevapla