Sql de tarih alanına göre sorgulama ve önceki-sonraki gün

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
kadirkisak
Üye
Mesajlar: 7
Kayıt: 05 Haz 2013 09:33

Sql de tarih alanına göre sorgulama ve önceki-sonraki gün

Mesaj gönderen kadirkisak »

Herkese merhabalar,
Arkadaşlar forumda yeniyim ve delphi ile kendi çapımda birşeyler yazmaya çalışıyorum. Benim bu problemim ile alakalı ne kadar örnek kod veya açıklama aradıysam bulamadım. Kendi başımada beceremedim.
Programım bir kasa programı ve ben bu kasa programında tarihlere göre kayıt yaptırıyorum.

Resim

Yapmak istediğm olay bugün butonuna basınca bugünün kasa işlemlerini getirsin, önceki gün e basınca bir önceki günü tekrar basınca bir önceki günü daha. Sonraki gün butonuda aynı şekilde. kasa isimli bir database im var ve bu kodları sql ile query ye yazmam gerekli.
Yardımlarınızı bekliyorum. :roll:
kadirkisak
Üye
Mesajlar: 7
Kayıt: 05 Haz 2013 09:33

Re: Sql de tarih alanına göre sorgulama ve önceki-sonraki gü

Mesaj gönderen kadirkisak »

Arkadaşlar Soruyu buraya yazdıktan sonra son çırpınışlarımı daha yaptım ve sorunumu şimdilik çözdüm. Benden başkasına yarar diye kodları paylaşmak istiyorum.
Bugün butonuna yazdığım kod şu şekilde ; (Bu arada date1 datetimepicker nesnesidir.)

Kod: Tümünü seç

date1.Date:=now;
liste_query.Close;
liste_query.SQL.Clear;
liste_query.SQL.Add('select * from kasa where tarih = date');
liste_query.Parameters.ParamByName('date').Value:=FormatDateTime('yyyy-mm-dd',date1.Date);
liste_query.Open;
Önceki Gün;

Kod: Tümünü seç

date1.Date:=date1.Date - 1;
.
.
Sonraki gün;

Kod: Tümünü seç

date1.Date:=date1.Date + 1;
.
.
Herkese teşekkür ederim.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Sql de tarih alanına göre sorgulama ve önceki-sonraki gü

Mesaj gönderen Kuri_YJ »

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,

Kod: Tümünü seç

WHERE FIELD_TARIH = :PRM_TARIH 
ş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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla