tarihe göre sorgulama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
tarihe göre sorgulama
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.
ö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.
tarih (ay/gun/yıl) 06/02/2006
bu kod işini görür
Kod: Tümünü seç
if (copy(teldtar.text,4,2)+'.'+copy(teldtar.text,1,2)=copy(datetostr(date),1,5) then
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:
uses a DateUtils i eklemeyi unutma
Kod: Tümünü seç
Query1.Close;
Query1.SQL.Text := 'SELECT * FROM tel WHERE Gun = '+DayOf(Date)+' AND Ay='+MonthOf(Date);
Query1.Open;
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
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
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.
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.
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;
06/02... ile başlayan tüm kayıtları verir.
kolay gelsin.
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.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?
Döngü kullanmana gerek yok, sorgu sonucunda veritabanında o gün ve aya eşit olan tüm veriler listelenir.
@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!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.
bu konuda size katılıyorum, ama mevcut halde eğer tüm tarih bilgilerinaile 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!
aa/gg/yyyy formatında kaydedilmişse yazdığım kod çözüm olur.
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.
şö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.
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.
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.
kolay gelsin
ş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;
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;
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.ama bu kod tarih alanını aa/gg/yyyy olan bir tablo için geçerli.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;
eğer ki senin tablonda tarih alanı gg.aa.yyyy şeklinde tutuluyorsa bir kaç değişiklik yapman lazım. kodu şöyle dene.
kolay gelsinKod: 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;
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.