İki Tarih Arası Filtreye Adsoyad Kriteri ? [ÇÖZÜLDÜ]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 142
Kayıt: 01 Oca 2008 05:34

İki Tarih Arası Filtreye Adsoyad Kriteri ? [ÇÖZÜLDÜ]

Mesaj gönderen Commandx » 09 Kas 2019 02:19

İki Kriterli filtreleme Yapmak istiyorum başaramadım yardımcı olur musunuz? (ADSOYAD VE IZIN_BASLA) Adında iki sütun yani iki tarih arası filtreye dayalı bir de Adsoyad Sütunundaki verilerin Filtre SQL Cümlesi nasıl kuruluyor, Doğru gittiğimi sanıyorum beceremedim hata verdirdim.

Kod: Tümünü seç

UniQuIZIN.Close ;
UniQuIZIN.SQL.ADD('SELECT * FROM KALANIZIN WHERE IZIN_BASLA BETWEEN :B_TARIH AND :S_TARIH AND ADSOYAD LIKE'+ '''%'+COMBOBOX13.Text +'%''') ;
UniQuIZIN.ParamByName('B_TARIH').AsDateTime := DATETIMEPICKER_BTarih.Date ; // BAŞLANGIÇ TARİHİ
UniQuIZIN.ParamByName('S_TARIH').AsDateTime := DATETIMEPICKER_STarih.Date ; // BİTİŞ TARİHİ
UniQuIZIN.SQL.Add(' ORDER BY ISBASI_TAR ,ADSOYAD,BIRIMI COLLATE PXW_TURK ASC'); //
UniQuIZIN.ExecSQL; ; 
statusbar1.Panels.Items[0].Text:=inttostr(UniQuIZIN.RecordCount);
Resim
En son Commandx tarafından 10 Kas 2019 04:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Zamane tickcount'u
except
ON E: Exception do
Begin
Application.MessageBox(Pchar('Can sıkıntısı '+#13+E.Message),'Hata',MBOKk+MB_ICONWARNING);
Abort;
End;
end;

mkysoft
Kıdemli Üye
Mesajlar: 3003
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: İki Tarih Arası Filtreye Adsoyad Kriteri ?

Mesaj gönderen mkysoft » 10 Kas 2019 08:39

Hata mesajını paylaşmadan birşey söylemek zor. Mantık doğru görünüyor.

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2150
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: İki Tarih Arası Filtreye Adsoyad Kriteri ?

Mesaj gönderen freeman35 » 10 Kas 2019 09:00

sonuç döndüren select için ExecSQL kullanamazsın. ama mkysoft un dediği gibi, nerden bilebiliriz verdiği hatayı?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

kadrikaya
Üye
Mesajlar: 38
Kayıt: 01 Ara 2016 11:31

Re: İki Tarih Arası Filtreye Adsoyad Kriteri ?

Mesaj gönderen kadrikaya » 10 Kas 2019 02:25

Merhaba,
Ben yaptığım projelerde genelde kullanıcıya filtre ekranı sunarım ve yapmak istediğini her ekranımda yaparım,
Kodunu istediğini verecek şekilde düzenledim ufak değişiklikleri sen yaparsın artık.
Kısaca mantık şu kullanmak istediğin bütün filtreler sorgunda varmış gibi olmalı ancak çalışmasını istediğin şartın filtresi
SQL dilinin anlayacağı şekilde "--" ile kapalı olmalı ve o şarta vereceğin unique bir isim olmalı, sonrasında sorgulama yaptırırken
ekranda verdiğin filtrelerin kodda kontrolünü yapmalı uygulanacak filtre varsa bu filtrenin satırını string replace ile açmalı ve eğer
parametresi varsa da belirtmelisin. Bu kadar.
Kolay gelsin.

Kod: Tümünü seç

UniQuIZIN.Close ;
UniQuIZIN.SQL.TEXT :='SELECT * FROM KALANIZIN WHERE IZIN_BASLA BETWEEN :B_TARIH AND :S_TARIH AND ADSOYAD LIKE'+ '''%'+COMBOBOX13.Text +'%'''+
' --FLT_ADSOYAD AND ADSOYAD = :ADSOYAD'+
' --FLT_ISBASI AND ISBASI_TAR = :ISBASI_TAR'+
' ORDER BY ISBASI_TAR ,ADSOYAD,BIRIMI COLLATE PXW_TURK ASC' ;

if Adsoyad_Filtresi.TExt <> '' then //ister ifadenin dolu olup oladığına istersen uzunluğuna bak
begin
   UniQuIZIN.SQL.TEXT := StringReplace(UniQuIZIN.SQL.TEXT,'--FLT_ADSOYAD','',[rfReplaceAll]);
   UniQuIZIN.ParamByName('ADSOYAD').AsString :=  Adsoyad_Filtresi.TExt;
end;

if BaslamaTarihi.TExt <> '' then //ister ifadenin dolu olup oladığına istersen uzunluğuna bak
begin
   UniQuIZIN.SQL.TEXT := StringReplace(UniQuIZIN.SQL.TEXT,'--FLT_ISBASI','',[rfReplaceAll]);
   UniQuIZIN.ParamByName('ISBASI_TAR').AsString :=  BaslamaTarihi.TExt;
end;
UniQuIZIN.Open;


Kullanıcı avatarı
Commandx
Üye
Mesajlar: 142
Kayıt: 01 Oca 2008 05:34

Re: İki Tarih Arası Filtreye Adsoyad Kriteri ?

Mesaj gönderen Commandx » 10 Kas 2019 03:56

SQL.TEXT YERİNE SQL.ADD Demişim Çalışmaması Bu yüzdenmiş .

Kod: Tümünü seç

UniQuIZIN.Close ;
UniQuIZIN.SQL.TEXT:=('SELECT * FROM KALANIZIN WHERE IZIN_BASLA BETWEEN :B_TARIH AND :S_TARIH AND ADSOYAD LIKE'+ '''%'+COMBOBOX13.Text +'%'' ORDER BY ISBASI_TAR DESC') ;

UniQuIZIN.ParamByName('B_TARIH').AsDateTime := DATETIMEPICKER_BTarih.Date ; // BAŞLANGIÇ TARİHİ
UniQuIZIN.ParamByName('S_TARIH').AsDateTime := DATETIMEPICKER_STarih.Date ; // BİTİŞ TARİHİ
//UniQuIZIN.SQL.Add(' ORDER BY ISBASI_TAR ,ADSOYAD,BIRIMI COLLATE PXW_TURK ASC'); //
UniQuIZIN.ExecSQL; ; //BBBBBB
statusbar1.Panels.Items[0].Text:='Listelenen '+ inttostr(UniQuIZIN.RecordCount)+ ' Kayıt';

Yardımlarınız için Teşekür ederim , Kodlar projemdeki diğer formlarda fikir verdi .
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
Zamane tickcount'u
except
ON E: Exception do
Begin
Application.MessageBox(Pchar('Can sıkıntısı '+#13+E.Message),'Hata',MBOKk+MB_ICONWARNING);
Abort;
End;
end;

Cevapla