Select içinde, datetime sorgusundaki sorun

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Select içinde, datetime sorgusundaki sorun

Mesaj gönderen Salih »

Merhaba,

Kod: Tümünü seç

select SIPARISNO, SIPTARIH...
         WHERE UretTarih >= ' + '''' + ME1.Text + '''' AND 
                    UretTarih <= ' + '''' + ME2.Text + ''''...
şeklinde bir sorgum var ve bu haliyle doğru çalışıyor.

Buradaki Urettarih in alan tipi DATE, bunu Timestamp yapmak istiyorum.
Ancak alan tipini timestamp yapıp, ME1.Text in içine '09.12.2006 09:00:00' gibi tarih ve saat yazınca conversion error mesajı alıyorum.
---------------------------
Debugger Exception Notification
---------------------------
exception class EMDOFirebirdError with message 'conversion error from string "09.12.2006 09:00:00"'. Process stopped. Use Step or Run to continue.
---------------------------
Tarih ve saati ne yaptıysam, nasıl yazdıysam olmadı, var mıdır bir çaresi ?
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

Kod: Tümünü seç

select SIPARISNO, SIPTARIH... 
         WHERE UretTarih >= ' + '''' + strtodatetime(ME1.Text) + '''' AND 
                    UretTarih <= ' + '''' + strtodatetime(ME2.Text) + ''''... 
Kolay Gelsin..
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

Hocam teşekkürler,

Ancak;

Gerekli SQL i, bir kaç tane SQL.Add cümlesiyle oluşturarak yaptığım için,
kullandığım cümlelerden ilgili bölüm şu şekilde :

Kod: Tümünü seç

UretQuery.SQL.Add('WHERE UretTarih >= ' + '''' + ME1.Text + '''');
UretQuery.SQL.Add('AND   UretTarih <= ' + '''' + ME2t.Text + '''');
Bu nedenle datetime tipinde değil, datetime bilgisini text e çevirerek vermem lazım.

Dolayısıyla, ME1.Text ve ME2.Text değerlerini şu şekilde elde ediyorum :

Kod: Tümünü seç

ME1.Text := DateTimetoStr(DateTimePicker1.DateTime);
ME2.Text := DateTimetoStr(DateTimePicker2.DateTime);
Bu karşılaştırma ve SQL komutu, sırf tarih kullanırken gayet güzel çalışıyordu, ama DATE tipini TIMESTAMP a çevirince yukarıda bahsettiğim hatayı veriyor.
Sevgi, Saygı.....
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

hocam dışardan parametre gönderimlerinde parametre kullanarak yapmanız gerekir. ifadenizi;

Kod: Tümünü seç

UretQuery.SQL.Add('WHERE UretTarih >= :TARIH1'); 
UretQuery.SQL.Add('AND   UretTarih <= :TARIH2');
UretQuery.ParamByName('TARIH1').AsDateTime :=  DateTimePicker1.DateTime;
UretQuery.ParamByName('TARIH2').AsDateTime :=  DateTimePicker2.DateTime;
şeklinde yaparsanız sorununuz çözülecektir.. siz sql ifade de text olarak parametre gönderiyorsunuz. yukarda parametrenin değişken tipi belli değildir. bunu siz dışardan parambyname().as... şeklinde belirtiyorsunuz..
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,

Kod: Tümünü seç

UretQuery.SQL.Add('WHERE UretTarih >= :TARIH1'); 
UretQuery.SQL.Add('AND UretTarih <= :TARIH2'); 
UretQuery.ParamByName('TARIH1').AsDateTime:= DateTimePicker1.DateTime;
UretQuery.ParamByName('TARIH2').AsDateTime:= DateTimePicker2.DateTime;
şeklinde parametre kullanarak yapabilirsiniz.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

İşlem tamam...

Mesaj gönderen Salih »

İşte bu... :)

Çok teşekkürler arkadaşlar, dediğiniz gibi olay çözüldü, son hali şu şekilde :

Kod: Tümünü seç

UretQuery.SQL.Add('WHERE UretTarih BETWEEN :TARIH1 AND :TARIH2');
UretQuery.Params[0].AsDateTime := StrToDateTime(ME1.Text + ' 00:01:00');
UretQuery.Params[1].AsDateTime := StrToDateTime(ME2.Text + ' 23:59:00');
Sevgi, Saygı.....
Cevapla