tarihe göre sorgulama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

tarihe göre sorgulama

Mesaj gönderen lazanya »

selam,
öncelikle ön bilgileri vereyim. adres ve tel programı var. Bu programda doğum tarihi olacak.
tablo adı : tel
alan adı : DTAR

sorum şu;
bir butona bastığımda tablodaki DTAR alanında kayıtlı tarihleri tarayıp gün ve ayı (d. tarihi olduğu için yıl gerekmiyor) o andaki sistem tarihi ile aynı olan kayıtları bulup listelemesini istiyorum. tarih (ay/gun/yıl) 06/02/2006 diye tutuluyor.

ay-gun ve yılı ayrı ayrı Dbeditlerde tutabilirim. belki sorgulaması yıl olmadığı için daha kolay olur.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

tarih (ay/gun/yıl) 06/02/2006

Kod: Tümünü seç

if (copy(teldtar.text,4,2)+'.'+copy(teldtar.text,1,2)=copy(datetostr(date),1,5) then 
bu kod işini görür
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Yıl önemli değil, sadece ay ve günü tutayım diyorsan ikisi için ayrı ayrı field oluştur mesela Gun ve Ay isminde, sql sorgunda da şu şekilde kullan:

Kod: Tümünü seç

Query1.Close;
Query1.SQL.Text := 'SELECT * FROM tel WHERE Gun = '+DayOf(Date)+' AND Ay='+MonthOf(Date);
Query1.Open;
uses a DateUtils i eklemeyi unutma
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

Mesaj gönderen lazanya »

nitrokonat kardeşim, ben çok iyi değilim bu tür sorgu konularında daha ayrıntılı olursa sevinirim.

naile, '+DayOf(Date)+' + nın yanında "incompatible types: string and word " hatası verdi. GUN ve AY alanları veritabanında ne olarak tanımlanmalı. DATE olması gerekmiyor değilmi? birde bu kod tüm veritabanını sorgulayacakmı. döngü kullanacağız değilmi. birtaz ayrıntılı olursa sevinirim.

her ikinizede teşekkürler
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

kardeş sen veritabanında yeni alanlar tanımlama aşağıdaki kodu kullan, bu kod sana tablodan verilen ay ve gün ile başlayan kayıtları verecektir.

Kod: Tümünü seç

query1.sql.close;
query1.sql.clear;
query1.sql.add('select * from tel where dtar like '+quotedstr(  copy(datetostr(date),4,2) +'/'+copy(datetostr(date),1,2)+'%'));
query1.open;
mesela bugünün tarihi 02.06.2006 ise bu sorgu sana veritananında dtar alanı
06/02... ile başlayan tüm kayıtları verir.
kolay gelsin.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

lazanya yazdı: naile, '+DayOf(Date)+' + nın yanında "incompatible types: string and word " hatası verdi. GUN ve AY alanları veritabanında ne olarak tanımlanmalı. DATE olması gerekmiyor değilmi?
DayOf dan dönen değer integer olduğu için stringe çevirmek lazım, yazmayı unutmuşum. IntTostr(DayOf(Date)) şeklinde kullanırsın.

Döngü kullanmana gerek yok, sorgu sonucunda veritabanında o gün ve aya eşit olan tüm veriler listelenir.
nitrokonat yazdı:mesela bugünün tarihi 02.06.2006 ise bu sorgu sana veritananında dtar alanı
06/02... ile başlayan tüm kayıtları verir.
@nitrokonat, peki veritabanında tarih alanı 02/06/2006 şeklinde sorgulanaması gerekiyorsa ne yapacak? Tam tersi bilgiler gelir. Bu tür tarih işlemlerinde formatlı veya parametreli ifadeler kullanmalısınız!
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

naile yazdı: @nitrokonat, peki veritabanında tarih alanı 02/06/2006 şeklinde sorgulanaması gerekiyorsa ne yapacak? Tam tersi bilgiler gelir. Bu tür tarih işlemlerinde formatlı veya parametreli ifadeler kullanmalısınız!
bu konuda size katılıyorum, ama mevcut halde eğer tüm tarih bilgileri
aa/gg/yyyy formatında kaydedilmişse yazdığım kod çözüm olur.
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

Mesaj gönderen lazanya »

deniyorum sağolun
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

Mesaj gönderen lazanya »

naile hocam,
şöyle yaptım;

Query1.Close;
Query1.SQL.Text := 'SELECT * FROM tel WHERE DGUN = '+IntTostr(DayOf(Date)) +' AND DAY='+IntTostr(MonthOf(Date));
Query1.Open;
Form9.QuickRep1.Preview;

quickreportta 3 tane dbtext var. adı, dbgun ve day alanları. fakat sorgulama sonucunda tüm kayıtları gün ve ay ile beraber listeliyor. ayırım yapmıyor.
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

slm nitrokonat kardeş...
benim tablomda doğum tarihi tek bir alanda tutuluyor bu yüzden senin kodunu kullanıyorum tablomdaki dogtar alanı date.kodu yazıp çalıştırdığımda type mismatch in expression hatası alıyorum hata datetostr de mi acaba yardımcı olabilirmisiniz?
Teşekkürler...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

yukarıda yazdığım kodda bi hata olacağını düşünmüyorum. sql like olayında fieldin tipini pek umursamaz.
şu an kullandığım bilgisayarda delphi olmadığı için deneme şansım olmuyor.

Kod: Tümünü seç

query1.sql.close; 
query1.sql.clear; 
query1.sql.add('select * from tel where dtar like '+quotedstr(  copy(datetostr(date),4,2) +'/'+copy(datetostr(date),1,2)+'%')); 
query1.open;
ama bu kod tarih alanını aa/gg/yyyy olan bir tablo için geçerli.
eğer ki senin tablonda tarih alanı gg.aa.yyyy şeklinde tutuluyorsa bir kaç değişiklik yapman lazım. kodu şöyle dene.

Kod: Tümünü seç

query1.sql.close; 
query1.sql.clear; 
query1.sql.add('select * from tel where dtar like '+quotedstr(  copy(datetostr(date),1,2) +'.'+copy(datetostr(date),4,2)+'%')); 
query1.open;
kolay gelsin
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

aynen öle hocam aa.gg.yyyy şeklinde.son gönderdiğinizi denedim ama yine type mismatch in expression diyor.anlamadım gitti bende deniyorum sürekli bişeyler ama düzelmiyor.sql i falan yazdırdım showmessage ile sql doğru gibi
ama sorun nerede bilmiyorum...
Teşekkürler...
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

Mesaj gönderen lazanya »

nitrokonat yazdı:yukarıda yazdığım kodda bi hata olacağını düşünmüyorum. sql like olayında fieldin tipini pek umursamaz.
şu an kullandığım bilgisayarda delphi olmadığı için deneme şansım olmuyor.

Kod: Tümünü seç

query1.sql.close; 
query1.sql.clear; 
query1.sql.add('select * from tel where dtar like '+quotedstr(  copy(datetostr(date),4,2) +'/'+copy(datetostr(date),1,2)+'%')); 
query1.open;
ama bu kod tarih alanını aa/gg/yyyy olan bir tablo için geçerli.
eğer ki senin tablonda tarih alanı gg.aa.yyyy şeklinde tutuluyorsa bir kaç değişiklik yapman lazım. kodu şöyle dene.

Kod: Tümünü seç

query1.sql.close; 
query1.sql.clear; 
query1.sql.add('select * from tel where dtar like '+quotedstr(  copy(datetostr(date),1,2) +'.'+copy(datetostr(date),4,2)+'%')); 
query1.open;
kolay gelsin

tek alanda(DBEdit11 de, alan adı DTAR) tutmaya karar verdim. sayın hocam seni yoracağım ama, bunu mutlaka çözmem lazım.
query1.sql.close; satırda undeclared identifier 'close' hatası verdi. neyi tanımlamayı unuttum ki.
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

kardeş o satırı sil...Ama sorunun yine çözülmeyecek çünkü bir terslik var kodda sanırım ben denedim ama olmadı bu sefer de type mismatch hatası veriyor sende dene çözersen yaz buraya... :)
nitrokonat kardeşim gelse çözecek bizim sorunu :wink:
lazanya
Üye
Mesajlar: 23
Kayıt: 13 Haz 2003 12:34
Konum: trabzon
İletişim:

Mesaj gönderen lazanya »

quotedstr kısmını sildim. quoted alıntı demek ama ne işe yarıyorsa. tıkladığımda şöyle bir hata verdi. Token not found Token: 6/ line Number 1 .. 6/ dediğine göre tarih şöyle 6/4/2006 burada bir yerde bir gariplik var.
Cevapla