Tarih Sorgusu hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Delphi08
Üye
Mesajlar: 25
Kayıt: 29 Tem 2004 09:16

Tarih Sorgusu hatası

Mesaj gönderen Delphi08 »

var
Aybasi:TdateTime;
Ayear,Amonth,Aday:Word;

begin
DecodeDate(Date,Ayear,Amonth,Aday);
Aybasi:=EncodeDate(Ayear,Amonth,01);

AdoTable1.close;
AdoTable1.SQL.clear;
AdoTable1.SQL.Add('Select * from kar_zarar WHERE ');
AdoTable1.SQL.Add('(AdoTable1tarih.value >= '+#39+ FormatDateTime('dd.mm.yyyy',aybasi)+#39+' and AdoTable1tarih.value <= '+#39+FormatDateTime('dd.mm.yyyy',date)+#39+')');

AdoTable1.open;

yukarıdaki sorguda ne hata varki sorgulama da ya tüm kayıtlar geliyor yada database zaman aşımı ikazı veriyor.
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Kod: Tümünü seç

AdoTable1tarih.value 
yerine tarih yazmanız gerekiyor.
Delphi08
Üye
Mesajlar: 25
Kayıt: 29 Tem 2004 09:16

Mesaj gönderen Delphi08 »

AdoTable1Tarih.Value yerine tarih yazıncada olmuyor.
Bu arada MS SQL SERVER kullanıyorum...
ikut

Re: Tarih Sorgusu hatası

Mesaj gönderen ikut »

Delphi08 yazdı:var
Aybasi:TdateTime;
Ayear,Amonth,Aday:Word;

begin
DecodeDate(Date,Ayear,Amonth,Aday);
Aybasi:=EncodeDate(Ayear,Amonth,01);

AdoTable1.close;
AdoTable1.SQL.clear;
AdoTable1.SQL.Add('Select * from kar_zarar WHERE ');
AdoTable1.SQL.Add('(AdoTable1tarih.value >= '+#39+ FormatDateTime('dd.mm.yyyy',aybasi)+#39+' and AdoTable1tarih.value <= '+#39+FormatDateTime('dd.mm.yyyy',date)+#39+')');

AdoTable1.open;

yukarıdaki sorguda ne hata varki sorgulama da ya tüm kayıtlar geliyor yada database zaman aşımı ikazı veriyor.
SQL serverda tarih formatı yok. tdatetime var. dolaysıyla eşit demek biraz sorun. çünkü işin içinde saat dk da giriyor.

birde extra iş yapıyorsun. startofthemonth vs incele biraz.
hbulus
Üye
Mesajlar: 163
Kayıt: 14 Tem 2003 11:30
İletişim:

Mesaj gönderen hbulus »

Tarih alanını kaydederken Dateof ile kaydederseniz sanırım çözüm olabilir.
Erbab-ı kemâli çekemez nakıs olan, rencide olur Dide-i Huffaş ziyadan....
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Tarih Biçimi

Mesaj gönderen sabanakman »

SQL'e Hangi kullanıcı ile bağlandığınıza göre sorgulardaki tarih formatı da değişir. Windows NT Tümleşik Güvenliği kullanarak bağlanıyorsanız tarih formatı standart AY.GÜN.YIL biçinde olacaktır. Sizde sorguda GÜN.AY.YIL formatı kullandığınız için bu tür sorunlar yaşıyorsunuz. Aslında sorgularınızda parametre kullanarak çalışırsanız bu tür problemler yaşamazsınız.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Aynı sorun bende de var.
AdoQuery kullanıyorum, mdb veri tabanındaki tarih alanına göre sıralama yapıyor ama vt daki tarih alanının metin (string, text, alpha gibi) olması gerekiyor. Tarih / Saat yapınca hata veriyor.

Bu şekilde sıralama yapıyor ama %99 yanlış, kalan %1lik kısım ise iki tarihinde aynı verildiği zamanlarda çıkan doğru sonuç :)

Kullandığım kod:

Kod: Tümünü seç

AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('Select * From Tablo1 Where tarih Between '''+DateToStr(DateTimePicker1.date)+ ''' and '''+ DateToStr(DateTimePicker2.date) +'''');
AdoQuery1.Open;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Tarih Formatı

Mesaj gönderen sabanakman »

DateToStr fonksiyonu GÜN.AY.YIL formatında değer döndürür. Halbuki sorguda AY.GÜN.YIL formatı kullanılmalıdır. Mesela 1 Ocak 2006 ile 5 Ocak 2006 şartı verilirken tarih değerine verilen şart Where tarih Between '01.01.2006' and '01.05.2006' olacağına sizin kodunuzda Where tarih Between '01.01.2006' and '05.01.2006' şartı üretir ve bu da 1 Ocak 2006 ile 1 Mayıs 2006 arası anlamına gelmektedir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla