Table içinde DATE tipi ile filtreleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Table içinde DATE tipi ile filtreleme

Mesaj gönderen ikut »

Merhaba

VT içinde date tipinde bir alan var. Bu tabloyu bu tarihe göre filtrelemek istediğimde başarılı bir sonuç alamıyorum. denediğim yöntemler.

Tarihi stringe çevirdim not a valid date diyor. Tarih olarak verirsem tip uyuşmazlığı diyor. (string and date)

Şimdi normalde query ile yaparım yapmaya ve yaptımda. ama iş inada döndü neden tarihe göre filtreleme olmaz. Aradım forumda böyle bir soru var ama cevap yok.
Bilen varmı bunu
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tarih formatında bir sorun vardır. VT nedir :?:
Table ın filtreleme özelliği ile mi yapıyorsun yoksa sorguyu o şekilde mi yapıyorsun? Sorgu ile yapıyorsan parametre kullan :wink:

Kod: Tümünü seç

select alan1, alan2 from tablo
where tarih = :pTarih

Kod: Tümünü seç

...
Query.ParamByName('pTarih').AsDateTime := DataTimePicker.Date;
Query.Open;
...
gibi..
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikut

Merhaba

Mesaj gönderen ikut »

rsimsek yazdı:Tarih formatında bir sorun vardır. VT nedir :?:
Table ın filtreleme özelliği ile mi yapıyorsun yoksa sorguyu o şekilde mi yapıyorsun? Sorgu ile yapıyorsan parametre kullan :wink:

Kod: Tümünü seç

select alan1, alan2 from tablo
where tarih = :pTarih

Kod: Tümünü seç

...
Query.ParamByName('pTarih').AsDateTime := DataTimePicker.Date;
Query.Open;
...
gibi..
Query ile zaten hallettim hocam. Ben sadece table ile yapmayı merak ediyorum. VT dbisam. tarihi aradan noktaları atıp yıl ay gun 8 harf notasyonunda gonderdim olmadı. normal tarihi stringe cevirdim olmadı.

filtre bu...

yonetim=False and viztar<='''+tmptar2+' and viztar>='+tmptar1+''

Ama
yonetim=False and viztar<='''+tmptar2+' and viztar>='''+tmptar1+''''
şeklindede olmadı. quoted str ilede.

yap not a valid date diyor. yada tip uyuşmazlığı karşı date sen string eriyorsun gibi. dediğim gibi query ile zaten yaptım ama iş inada döndü.

saygılar
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Piyango çekmektense DBIsam ın yardım dosyalarından tarihi hangi formatta aldığı kontrol edilebilir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Ah şu sorgular

Mesaj gönderen sabanakman »

Kod: Tümünü seç

Tablo.Filter:='yonetim=False and viztar<='''+tmptar2+' and viztar>='+tmptar1+'' 
değilde

Kod: Tümünü seç

Tablo.Filter:='yonetim=False and viztar<='''+tmptar2+''' and viztar>='''+tmptar1+''';
şekline getir ama veri tabanı formatın gün/ay/yıl formatında değilse ona uygun hale getirmeye dikkat et. Mesela Ay/Gün/Yıl biçimine getirebilmek için

Kod: Tümünü seç

//tar1 ve tar2 tdatetime tipli değişkenler..
Tablo.Filter:='yonetim=False and viztar<='+QuoteStr(FormatDateTime(Format('MM%sdd%syyyy',[DateSeparator,DateSeparator]),tar2))+' and viztar>='+QuoteStr(FormatDateTime(Format('MM%sdd%syyyy',[DateSeparator,DateSeparator]),tar1))+';
biçiminde kullanılabilir ama delphi tarafındaki tablolar (TDataSet nesneleri) gün/ay/yıl formatını kullanarak filtreleme yapabilir. Hala çözemezsen sadece tarih filtresi vermeyi deneyerek (Tablo.Filter:='viztar<=''29.06.2006''') başla ve filtrenin geri kalanını çalıştırdığın tarih filtresine göre oluştur.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikut

Re: Ah şu sorgular

Mesaj gönderen ikut »

VT içinde 20060629 gibi tutulduğunu ontrol ettim buna uygun göndermeme rağmen gene olmadı. aslında benimki boş inat ama yinede öğrenmiş olmak için sormuştum. Query lerin gözünü seveyim ... Ah birde şu Join dertlerim olmasa.
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Hocam şu şekilde bir fonksiyon yazabilirsin o zaman senin vt'den de 20060629 şeklinde yazan bilgi formda bu kod ile otomatik olarak 29 06 2006 olarak gelir.

Kod: Tümünü seç

function Tanafrm.donustur(tarih: tdate): string;
var
  gun,ay,yil:word;
begin
 DecodeDate(tarih,yil,ay,gun);
 result:=CurrToStr(yil)+'-'+CurrToStr(ay)+'-'+CurrToStr(gun);
end;
Formda çağırırken ise kullanımı

Kod: Tümünü seç

donustur(dxdateEdit2.Date);
Bu şekilde kullanabilirsin... ;)
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Cevapla