Selamlar,
Öncelikle sorunuza bulduğunuz yanıtı da paylaşıyor olmanızdan dolayı teşekkür etmek isterim.
Daha sonra burada yapabileceğiniz şeylere biraz daha aydınlatıcı olması açısından ek bilgiler vereyim.
Şimdi,
date1.date := now ; demişsiniz. Burada şöyle bir sıkıntıyla karşılaşma ihtimaliniz var. Now dediğinizde Date + Time şeklinde bilgi döner. Sadece o güne ait kayıtları filtrelemekte zorluk çekersiniz. Onun yerine,
date1.date := date ; derseniz sadece tarih kısmını alırsınız. Veya DateTime Field'ı aslında Double bir sayıdır. Tam sayı kısmı Tarihi, noktadan sonrası ise Saat, saniye vs. gibi zamanı belirtir. Eğer Trunc(now) ; derseniz sadece tarihi almış olursunuz.
Tabi yaptığınız kayıtlarda kullandığınız DateTime formatı da önem arz ediyor. Yani siz Datetime bir fielda sadece Date koyarsanız karşılaştırırken zorluk çekmezsiniz, şöyle ki,
şeklinde karşılaştırma yapabilirsiniz ama FIELD_TARIH alanıa Date+Time olarak değer koyuyorsanız o zaman şöyle bir mantık gütmeniz gerek
Kod: Tümünü seç
WHERE FIELD_TARIH >= :PRM_B_TARIH AND FIELD_TARIH <= :PRM_S_TARIH
ve buradaki Başlangıç ve bitiş parametrelerine (örnek olsun diye 12.01.2013 tarihini ele alalım) Başlangıç filtresine 12.01.2013 00:00:00.000 Bitiş parametresine de 12.01.2013 23:59:59.999 olarak tanımlamanız gerekir,
Ama kodunuzu şu şekilde yaparsanız,
Kod: Tümünü seç
WHERE FIELD_TARIH >= :PRM_B_TARIH AND FIELD_TARIH < :PRM_S_TARIH
O zaman Başlangıç filtresine 12.01.2013 00:00:00.000 Bitiş parametresine de 13.01.2013 00:00:00.000 olarak tanımlamanız gerekir ki, bu daha kolay olacaktır.
Bunun dışında, Delphi'de Parametre geçerken şöyle yapsanız daha rahat edersiniz, (Sizin verdiğiniz örneği düzeltiyorum)
Kod: Tümünü seç
liste_query.Parameters.ParamByName('date').Value := date1.Date;
Muhtemelen siz time partını kesebilmek için FormatDateTime'ı kullanmak zorunda kaldınız. Buna gerek yok. Onun yerine de şunu yapabilirsiniz.
Kod: Tümünü seç
liste_query.Parameters.ParamByName('date').Value := Trunc(date1.Date); // Time kısmını kesip atar.
Kolay Gelsin
Adnan