Sorguda tarih değeri kullanmak-Sorun veriyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Sorguda tarih değeri kullanmak-Sorun veriyor

Mesaj gönderen CinAnka »

Merhaba;

Arkadaşlar, aşağıda yazmış olduğum kod, verilen baslangıç ve bitiş tarihlerini alarak bir sorgu yapıyor ama programı çalıştırdığım zaman:

'veri ölçüt türü uyuşmazlığı' diye bir hata veriyor.

Sanırım sorun tarih alanlarında, ama ben bir türlü çözemedim...

Kod: Tümünü seç

baslangictarihi:=datetimepicker4.Date;
bitistarihi:=datetimepicker3.Date;

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Text:='SELECT REFERANS,MSG_TARIH,MSG_GOVDE FROM GIDEN_SMS WHERE MSG_TARIH>=:PARAM1 AND MSG_TARIH<=:PARAM2';
adoquery1.Parameters.ParamByName('PARAM1').VALUE:=baslangictarihi;
adoquery1.Parameters.ParamByName('PARAM2').VALUE:=bitistarihi;
adoquery1.open;

tarih alanlarını okurken ya da karşılaştırırken bilgisayar nasıl okuyor bilmiyorum ama, 2 tarih aynı olmasına rağmen aynı görmüyor. neden?

Kod: Tümünü seç

if (datetimepicker4.date)=(datetimepicker3.date) then
showmessage('tarih aynı');
end;
mesela bu örnekte tarihleri aynı görmediği için showmessage komutu işleme girmiyor:(
Güçlü olan haklı değil, haklı olan güçlüdür!
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Şu şekilde yapman sorununu çözebilir:

Kod: Tümünü seç

adoquery1.Parameters.ParamByName('PARAM1').asDateTime:=baslangictarihi; 
adoquery1.Parameters.ParamByName('PARAM2').asDateTime:=bitistarihi;
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

şöyle bir çözüm var;

Kod: Tümünü seç

if datetostr(datetimepicker1.date)=datetostr(datetimepicker2.date) then showmessage('tarih aynı');
Neden böyle yapıyor ben de anlamadım.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Çok farklı tarih türleri var. Delphi DateTimePicker.Date in tipi muhtemelen kullandığınız veri tabanındaki ilgili alanın tipi ile uyuşmuyor(veritabanı nedir alan türü nedir belirtmemişsiniz.)

Direk bir cevap veremiyorum; Ama

En sağlam string olan sorguya tarihi, string olarak eklemektir. Bu hemen her veritabanında çalışacak standart bir yol olabilir(emin değilim her veritabanında denemediğim için).

Eğer firebird kullanıyorsanız field (alan) türünüz TimeStamp olursa Delphi deki DateTime ile uyum sorunu (genelde) yaşamazsınız.
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Re: Sorguda tarih değeri kullanmak-Sorun veriyor

Mesaj gönderen MicroChip »

CinAnka yazdı:Merhaba;

Arkadaşlar, aşağıda yazmış olduğum kod, verilen baslangıç ve bitiş tarihlerini alarak bir sorgu yapıyor ama programı çalıştırdığım zaman:

'veri ölçüt türü uyuşmazlığı' diye bir hata veriyor.

Sanırım sorun tarih alanlarında, ama ben bir türlü çözemedim...

Kod: Tümünü seç

baslangictarihi:=datetimepicker4.Date;
bitistarihi:=datetimepicker3.Date;

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Text:='SELECT REFERANS,MSG_TARIH,MSG_GOVDE FROM GIDEN_SMS WHERE MSG_TARIH>=:PARAM1 AND MSG_TARIH<=:PARAM2';
adoquery1.Parameters.ParamByName('PARAM1').VALUE:=baslangictarihi;
adoquery1.Parameters.ParamByName('PARAM2').VALUE:=bitistarihi;
adoquery1.open;

tarih alanlarını okurken ya da karşılaştırırken bilgisayar nasıl okuyor bilmiyorum ama, 2 tarih aynı olmasına rağmen aynı görmüyor. neden?

Kod: Tümünü seç

if (datetimepicker4.date)=(datetimepicker3.date) then
showmessage('tarih aynı');
end;
mesela bu örnekte tarihleri aynı görmediği için showmessage komutu işleme girmiyor:(
Adoquery dediğine göre veritabanı firebird değildir heralde. Ya access yada mssql (atıyorum tabi). Tarih formatını standart tarih olarak versene
yine atıyorum:
#2006/04/01#
#20/04/2006#
gibi

vt ni yazsaydın daha ii olurdu anca atıyoruz yoksa ;)


Saygılar...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

windoms tarih ayarlarından kaynaklanmasın :lol:
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

Mesaj gönderen nnicc39 »

Soruda vermiş olduğun kodda ParamByName ' de ".VALUE" yerine "AsDate" kullanırsan sorun çözülür gibime geliyor.
nnicc39
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 08:59
Konum: Çankırı

Mesaj gönderen nnicc39 »

Soruda vermiş olduğun kodda ParamByName ' de ".VALUE" yerine "AsDate" kullanırsan sorun çözülür gibime geliyor.
Cevapla