İki tarih arası sorguda hata var.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

İki tarih arası sorguda hata var.

Mesaj gönderen delphici »

Selam

Kod: Tümünü seç

Adoquery1.Sql.Clear;
Adoquery1.Sql.Add('SELECT * FROM Alinan WHERE (tarih>="'+tarih.text+'" And Tarih<="'+tarih2.text+'")';
Adoquery1.Sql.Open;
Tarih alanının tipi : Tarih/Saat olarak ayarlı.

Bu sorguyu çalıştırdığımda "ölçüt ifadesinde veri türü uyuşmazlığı" hatasını veriyo.

Not : Tablodaki Tarih alanının tipini metin olarak yapsam tarih işlemini yaptırabilirmiyim. Öyle denediğimde tarihi string olarak alıgılyo o yüzden tam sonuç vermedi.
İyi çalışmalar kolay gelsin.
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

kardes bence sorgunu bir query yaz ondan sonra parametre kismina

Adoquery1.ParamByName('TARIH1').AsDateTime := Int(DP1.Date) + Frac(TP1.Time);
Adoquery1.ParamByName('TARIH2').AsDateTime := Int(DP2.Date) + Frac(TP2.Time);
Adoquery1.Active := True;

bu kod isini gorur ancak sunu belirteyim dp1,dp2,tp1,tp2 datapicker dp1 ve dp2 tarih tp1 ve tp2 ise time olarak ayarlarsan hem saate hemde tarihe gore sorgu yaparsin yani saat degistiginde farkli sonuc alabilirsin kolay gelsin
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

tarihb alanını " içinde yazdığın için string olarak kabul ediyor..
DeveloperToolKit

..::|YeşilMavi|::..
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

@cuneyt22 kardeş dediğin bu kodlar hata veriyor, başka bir düşüncen varmı? yada başka düşüncesi olan varmı?
iyiçalışmalar
tarihb alanını " içinde yazdığın için string olarak kabul ediyor..
Başka nasıl yapabilirm ki. Tırnak koymasam hata veriyo. Parametre ile yapsam doğru sonuç vermiyo tarihleri string olarak algılıyı ve ona göre işlem yapıyo.
Mesela şu tarihler olsun;
09.09.2004
08.08.2004
11.09.2004

Şu iki tarihi verdiğimde 01.09.2004 - 12.09.2004
yukaridaki tüm tarihleri sıralıyo. 08.08.2004'ü vermemesi lazım.

Hata bundan ibaret. Anlatabildiğim kadarıyla anlayan arkadaşlar yardım ederse sevinirim.

İyi çalışmalar kolay gelsin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

veri tabanı access ise tarih ifadesini # # arasına alacaksın
#19.09.2004# gibi
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

evet gkimirti kardesin dedigi gibidir buyuk ihtimal cunku ben kodlari interbasede oraclede kullaniyorum ve hatasiz calisiyor ama access ise onu bilemiyecem zaten gkimirtide dogru cevabi soylemis
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

Kod: Tümünü seç

With AlinanaQ2 Do
  Begin
       SQL.Clear;
      SQL.Add('SELECT * FROM Alinan WHERE (Tarih BETWEEN :ilktarih AND :sontarih)');
        Parameters.ParamByName('ilktarih').value:=Tar1.Date;
        Parameters.ParamByName('sontarih').Value:=Tar2.Date;
       Sql.Add('ORDER BY Tarih');
       Open;
  End;
Not : AlinanQ2 Adoquery nesnesi.
Not : Tar1 ve Tar2 TDateTimePicker nesneleri.

Bu şekilde kullandığımda Project Project1.exe raised exception class EOleException with message 'Ölçüt ifadesinde
veri türü uyuşmazlığı'. Process stopped. Used Step or Run to continue.
böyle bir hata veriyo.

yukaridaki Select ile başlayan satırı

Kod: Tümünü seç

  SQL.Add('SELECT * FROM Alinan WHERE (Tarih BETWEEN #:ilktarih# AND #:sontarih#)');
şeklinde # işareti koyduğumda aşağıdaki gibi bir hata veriyo.

Project Project1.exe raised exception class EDatabase Error with message 'AlinanQ2:Parameter
'ilktarih' not found'. Process stopped. Used Step or Run to continue.


İyi çalışmalar kolay gelsin.
En son delphici tarafından 17 Eyl 2004 08:09 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

simdi benim anladigim benim ilk ifadende veri turu uyusmazlligi var yani sen Parameters.ParamByName('ilktarih').value:=Tar1.Date;
Parameters.ParamByName('sontarih').Value:=Tar2.Date;

bu ifadede hata yapiyorsun senin tarih alanlarin sadece tarihmi yoksa icinde zamandami var eger zaman (saat dakika saniye) olayi varsa Tar1.Datetime; seklinde dene ayrica senin kullandigin veritabani hangisi bunuda belirtirsen daha iyi cevap bulursun..
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

iki tarih arası sorgulama olayı önceki konularda geçti access vt yi bilmiyorum ama ilktarih ve sontarih olayı

var
ilktarih, sontarih:tdate;
begin

olarak tanımlayarak denesen

kolay gele
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

@cuneyt22 kardeş adquery kullandığımı belirttim ya yani Access kullanıyorum. @gkimirti'nin dediği gibi tarihleri # işareti arasıona aldım yine hata veri. Veri tabanında kullanığım Tarih alanı "Tarih/Saat" olarak ayarlı Biçiminide KısaTarih yaptım yani saat yok sadece Tarih.

Yardım ederseniz sevinirim. Bu iş gittikçe karışmaay başladı.

İyi çalışmalar kolay gelsin.
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

anladigim kadari ile

SQL.Add('SELECT * FROM Alinan WHERE (Tarih BETWEEN #:ilktarih# AND #:sontarih#)');
ifadesini yanlis kullanmissin yani #:ilktarih diye birsey olmaz ya #19.08.2004# olarak yaparsin yada interbase yada oraclede '19.08.2004' seklinde kullanirsin ancak sen parambyname ile deger atayacagina gore ilk dedigim sekilde olacak.. bu arada sen 4 tanemi timerpicker koydun 1..2.sini ise eger 4 adet kullanmis isen 2 tane saat diger ikisini time olarak yaptinmi datepickerden saat olanlarin 2sinide time olarak yap sorun halolabilir ins olur
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

Selam arkadaşlar sayenizde sorunu hallettim.

Kod: Tümünü seç

 With Anaprog.AlinanQ2 Do
  Begin
       SQL.Clear;
       SQL.Add('SELECT * FROM Alinan Tarih>=:ilktarih AND Tarih<=:sontarih');
        Parameters.ParamByName('ilktarih').value:=Tar1.Datetime;
        Parameters.ParamByName('sontarih').Value:=Tar2.Datetime;
        Sql.Add('ORDER BY Tarih');
       Open;
  End;
Herkeze iyi çalışmalar kolay gelsin.
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

sorunu cozmene sevindim...
Cevapla