iki tarih arası sorgu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

iki tarih arası sorgu

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar aşağıdaki kod ile iki tarih arası sorgulama yapıyorum.

şöyle bir sorun var ilk tarih 01.07.2017 ikinci tarih 10.07.2017 toplam 10 adet kayıt var ama 9 çıkıyor nerede hata yapıyorum acaba ?

Teşekkürler

böyle yaparsam sorun düzeliyor ama bu doğru değil?
QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH1.date);
QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH2.date+1);


Kod: Tümünü seç

//////////// PROJE SERVİSLERİ
       QRYSERVIS_RAPORLAR_DB.Close;
       QRYSERVIS_RAPORLAR_DB.SQL.Clear;
       QRYSERVIS_RAPORLAR_DB.SQL.Add(' select  '
                                  +' CASE WHEN P.SERVIS_SAYISI=1 AND P.SERVIS_TURU='+#39+'Normal Servis'+#39+' THEN P.FIRMA_FIYAT+(P.FIRMA_FIYAT/4) ELSE P.SERVIS_SAYISI*P.FIRMA_FIYAT  END AS TEK_FIYAT, '
                                  +' A.PLAKA,A.MARKA_MODEL, A.PERSONEL_KIMLIK,A.ARAC_BAGLI_FIRMA,A.AKTIF_PASIF,A.CALISILAN_FIRMA,A.ARAC_TURU, '
                                  +' P.KIRALIK_FIYAT,P.FIRMA_FIYAT, '
                                  +' P.KIRALIK_FIYAT_BIRIM,P.FIRMA_FIYAT_BIRIM, P.DURUM, P.SERVIS_SAYISI, '
                                  +' P.CALISILAN_FIRMA, P.GUZERGAH, P.BOLUM_ADI, P.KAPASITE, P.PROJE_ADI, P.PROJE_KIMLIK, P.ARAC_KIMLIK,  '
                                  +' P.SABLON_KIMLIK, P.PROJE_BAGLI_FIRMA, '
                                  +' SUM(ISNULL(P.SERVIS_SAYISI,0)) AS SAYI  '
                                  +' from ARACLAR A  '
                                  +' LEFT JOIN SERVIS_PUANTAJ P ON P.ARAC_KIMLIK=A.KIMLIK ');
        QRYSERVIS_RAPORLAR_DB.SQL.Add('WHERE P.CALISILAN_FIRMA='+#39+KULLANICI_GIRIS.qryCALISILAN_FIRMA_DB.FieldByName('KIMLIK').Text+#39+' ');
        QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.SERVIS_SAYISI <>'+#39+'0'+#39+'');
        if edtGUZERGAH_ACIKLAMA.Text<>'' then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.GUZERGAH LIKE ''%'+edtGUZERGAH_ACIKLAMA.Text+'%''');
        if btnPROJE_ID_TEXT.Text<>''     then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.PROJE_KIMLIK ='+#39+btnPROJE_ID_TEXT.Text+#39+'');
        if CARI_ID_TEXT.Text<>''         then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.PROJE_BAGLI_FIRMA='+#39+CARI_ID_TEXT.Text+#39+'');
        if cbbKAPASITE.Text<>''          then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.KAPASITE='+#39+cbbKAPASITE.Text+#39+'');
        if cbbARAC_BOLUMU.Text<>''       then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.BOLUM_ADI='+#39+cbbARAC_BOLUMU.Text+#39+'');
        if cbbDURUM.Text<>''             then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.DURUM='+#39+cbbDURUM.Text+#39+'');
        if btnARAC_ID_TEXT.Text<>''      then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.ARAC_KIMLIK='+#39+btnARAC_ID_TEXT.Text+#39+'');
        if edtISIM.Text<>''              then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.EKSTRA_ISIM LIKE ''%'+edtISIM.Text+'%''');
        if edtSEBEP.Text<>''             then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.EKSTRA_SEBEP LIKE ''%'+edtSEBEP.Text+'%''');
        if edtTALEP_EDEN.Text<>''        then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.EKSTRA_TALEP_EDEN LIKE ''%'+edtTALEP_EDEN.Text+'%''');
        if cbbSERVIS_TURU.Text<>''       then QRYSERVIS_RAPORLAR_DB.SQL.Add(' and P.SERVIS_TURU='+#39+cbbSERVIS_TURU.Text+#39+'');




        QRYSERVIS_RAPORLAR_DB.SQL.Add('and  P.TARIH>=:tar1 and P.TARIH<=:tar2 ');
        QRYSERVIS_RAPORLAR_DB.SQL.Add(' GROUP BY A.PLAKA,A.MARKA_MODEL, a.PERSONEL_KIMLIK,a.ARAC_BAGLI_FIRMA,a.AKTIF_PASIF,a.CALISILAN_FIRMA, P.KIRALIK_FIYAT,P.FIRMA_FIYAT, '
                                  +' A.ARAC_TURU,P.KIRALIK_FIYAT_BIRIM,P.FIRMA_FIYAT_BIRIM,P.DURUM,  P.SERVIS_SAYISI, '
                                  +' P.CALISILAN_FIRMA, P.SERVIS_TURU, '
                                  +' P.GUZERGAH, P.BOLUM_ADI, P.KAPASITE, P.PROJE_ADI, P.PROJE_KIMLIK, P.ARAC_KIMLIK, P.SABLON_KIMLIK, P.PROJE_BAGLI_FIRMA ');


        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH1.date);
        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH2.date);

 QRYSERVIS_RAPORLAR_DB.Open;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: iki tarih arası sorgu

Mesaj gönderen ertank »

Merhaba,

Kullandığınız Delphi sürümü ve database sistemi nedir?

Örnek kodunuzun ilgili bölümünü aşağıdaki şekilde deneyebilir misiniz?

Kod: Tümünü seç

        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').AsDate := dtpTARIH1.Date;
        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').AsDate := dtpTARIH2.Date;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arası sorgu

Mesaj gönderen erdogan_ozkaya »

Merhaba,

delphi 7 kullanıyorum, sql 2014, datetime alan tipi

AsDate de hata veriyor olmuyor

Teşekkürler
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: iki tarih arası sorgu

Mesaj gönderen ertank »

AsDateTime olarak ta kullanabilirsiniz.

Kod: Tümünü seç

uses
  DateUtils;

        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').AsDateTime := DateOf(dtpTARIH1.Date);
        QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').AsDateTime := DateOf(dtpTARIH2.Date);
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: iki tarih arası sorgu

Mesaj gönderen tayipk »

merhaba

QRYSERVIS_RAPORLAR_DB.SQL.Add('and P.TARIH>=:tar1 and P.TARIH<=:tar2 ');
kodunuzu
QRYSERVIS_RAPORLAR_DB.SQL.Add('and P.TARIH between :tar1 and :tar2 ');

olarak değiştirin ve

QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH1.date);
QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').Value := FormatDateTime('DD.MM.YYYY',dtpTARIH2.date+1);

kodlarını da

QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar1').Value := FormatDateTime('YYYY-MM-DD',dtpTARIH1.date);
QRYSERVIS_RAPORLAR_DB.Parameters.ParamByName('tar2').Value := FormatDateTime('YYYY-MM-DD',dtpTARIH2.date);

şeklinde değiştirerek denermisiniz sql veritabanında tarihler YYYY-MM-DD formatında yazıldığı için . algılamayabiliri diye düşünüyorum yani tarih görünürde 21.07.2017 olabilir ama db de 2017-07-21 diye yazar bende bir ara bu sıkıntıyı yaşamıştım.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki tarih arası sorgu

Mesaj gönderen erdogan_ozkaya »

yok olmadı ya ne denediysem olmadı :(
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: iki tarih arası sorgu

Mesaj gönderen ertank »

Tablo yapısı, sorunu oluşturabilecek örnek veriler (farklı SQL Server sürümlerinde kullanabilmek adına insert komutu şeklinde olması faydalı olacaktır) ve sorunu gösteren küçük bir demo uygulama hazırlayıp paylaşabilir misiniz?
Cevapla