Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bnyamin
Üye
Mesajlar: 39
Kayıt: 01 Mar 2019 12:55

Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme [Çözüldü]

Mesaj gönderen bnyamin »

https://hizliresim.com/dl8VTp

Arkadaşlar merhaba yukarda linkini paylaşmış olduğum fotoğraftaki gibi filtreleme işlemini nasıl yapabilirim.
aynı tabloda farklı sütunlarda filtreleme yapılıyor filtreleme işleminde comboboxlar kullanılıyor.Checkboxlar işaretlendiğinde ise filtreye tarihlerde
dahil oluyor. ve burdaki her filtrede sütunlarla bağlantılı filtreleme yapılıyor comboboxlarda --TÜMÜ-- yazdığında ve checkboxlar işaretli olmadığında ise tüm kayıtlar gösteriliyor. Yardımlarınız için şimdiden teşekkür ediyorum.
En son bnyamin tarafından 02 Oca 2021 08:00 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
AfterPost
Üye
Mesajlar: 130
Kayıt: 12 Tem 2014 10:22

Re: Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme

Mesaj gönderen AfterPost »

Çoklu filtre için benim kullandığım bir Kod , kendine göre düzenleyebilirsin.

Kod: Tümünü seç

with Modul.R_Adisyon do
 begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT MASA_ID,MASA_ADI,');
  SQL.Add('SUM(K_TUTAR) AS T_KASA, SUM(B_TUTAR) AS T_BANKA, SUM(TUTAR) AS T_TUTAR');
  SQL.Add('FROM T_ADISYON') ;
  SQL.Add('WHERE STATU <> 4 AND  TARIH >= :TARIH1 AND TARIH <= :TARIH2 ');

  if cxTextEdit1.Text <> '' then
  begin
   case RadioGroup1.ItemIndex of
    0 :SQL.Add('AND MASA_ADI LIKE '+QuotedStr(cxTextEdit1.Text+'%')+'  ');
    1 :SQL.Add('AND MASA_ADI LIKE '+QuotedStr('%'+cxTextEdit1.Text+'%')+'  ');
    2 :SQL.Add('AND MASA_ADI = '+QuotedStr(cxTextEdit1.Text)+'  ');
    3 :SQL.Add('AND MASA_ADI <> '+QuotedStr(cxTextEdit1.Text)+'  ');
   end;
  end;

  if cxTextEdit2.Text <> '' then
  begin
   case RadioGroup1.ItemIndex of
    0 :SQL.Add('AND GARSON LIKE '+QuotedStr(cxTextEdit2.Text+'%')+'  ');
    1 :SQL.Add('AND GARSON LIKE '+QuotedStr('%'+cxTextEdit2.Text+'%')+'  ');
    2 :SQL.Add('AND GARSON = '+QuotedStr(cxTextEdit2.Text)+'  ');
    3 :SQL.Add('AND GARSON <> '+QuotedStr(cxTextEdit2.Text)+'  ');
   end;
  end;

  SQL.Add('GROUP BY MASA_ID,MASA_ADI ') ;
  ParamByName('TARIH1').AsDateTime := cxDateEdit1.Date;
  ParamByName('TARIH2').AsDateTime := cxDateEdit2.Date;
  Open;
 end;
 
bnyamin
Üye
Mesajlar: 39
Kayıt: 01 Mar 2019 12:55

Re: Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme

Mesaj gönderen bnyamin »

Arkadaşlar filtreleme sorununu hallettim şükür. Belki işine yarayan olur diye kodu paylaşıyorum konu ile ilgilenip cevap yazan arkadaşlara da çok teşekkür ediyorum.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
VAR
SQL : string;
toplam:currency;
begin
FORM2.SHOW;
SQL := '';
if trim(combobox1.Text) <> '' then SQL := '[PLAKA_NO]=' + QuotedStr(combobox1.Text) ;
if trim(combobox2.Text) <> '' then if SQL = '' then SQL := '[ALICI_FIRMA]=' + QuotedStr(combobox2.Text) else SQL := SQL + ' AND '+  '[ALICI_FIRMA]=' + QuotedStr(combobox2.Text) ;
if trim(combobox3.Text) <> '' then if SQL = '' then SQL := '[MALIN_CINSI]=' + QuotedStr(combobox3.Text) else SQL := SQL + ' AND '+  '[MALIN_CINSI]=' + QuotedStr(combobox3.Text) ;
if trim(combobox4.Text) <> '' then if SQL = '' then SQL := '[SATICI_FIRMA]=' + QuotedStr(combobox4.Text) else SQL := SQL + ' AND '+  '[SATICI_FIRMA]=' + QuotedStr(combobox4.Text) ;
if trim(combobox5.Text) <> '' then if SQL = '' then SQL := '[ACIKLAMA]=' + QuotedStr(combobox5.Text) else SQL := SQL + ' AND '+  '[ACIKLAMA]=' + QuotedStr(combobox5.Text) ;

if checkbox1.checked=true  then if SQL = '' then  SQL := '[CIKIS_TARIHI]>=' + SQLDateFmt(datetimepicker1.Date) else SQL := SQL + ' AND '+  '[GIRIS_TARIHI]>=' + SQLDateFmt(datetimepicker1.Date) ;
if checkbox2.checked=true  then if SQL = '' then  SQL := '[CIKIS_TARIHI]<=' + SQLDateFmt(datetimepicker2.Date) else SQL := SQL + ' AND '+  '[CIKIS_TARIHI]<=' + SQLDateFmt(datetimepicker2.Date) ;




adoquery2.Filtered :=False;
adoquery2.Filter := SQL;
adoquery2.Filtered :=True;

adoquery2.DisableControls;
ADOQuery2.First;
  while not ADOQuery2.Eof do
  Begin
    Toplam := Toplam + ADOQuery2.FieldByName('NET').Value;
    ADOQuery2.Next;
  End;
 form2.cxCurrencyEdit1.Text := CurrToStrf(Toplam,ffnumber,0)+ '  KG';
 form2.Label1.Caption := CurrToStrF(Toplam,ffnumber,0)+ '  KG';
  adoquery2.EnableControls;
end;
Cevapla