iki tarih arası sorgulama?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
iki tarih arası sorgulama?
iki tarih arası sorgulamayı nasıl yapabilirim.
doğru değil ama şu mantıkda;
FROM hareket
WHERE TARIH>'01.01.1999 and TARIH<'31.02.1999';
doğru değil ama şu mantıkda;
FROM hareket
WHERE TARIH>'01.01.1999 and TARIH<'31.02.1999';
Kod: Tümünü seç
with Query do
begin
Sql.Clear;
Sql.Add('SELECT *');
Sql.Add('FROM tablo');
Sql.Add('WHERE tablo.Tarih>=:TARy');
Sql.Add('AND tablo.Tarih<=:TARx');
Params[0].AsDate:=Date;
Params[1].AsDate:=Date;
Open;
Close;
end;
select * from hareket where tarih>='01.01.2004' and tarih<='31.12.2004'
Yaparsan sonucu verir. tabi tarih alanının date veya timestamp olması lazım. Parametrelerlede yapabilirsin
select * from hareket where tarih>=:tarih1 and tarih<=:tarih2
query1.params[0].asdate:=strtodate('01.01.2004');
query1.params[1].asdate:=strtodate('31.12.2004');
şeklinde.
Kolay gelsin
Yaparsan sonucu verir. tabi tarih alanının date veya timestamp olması lazım. Parametrelerlede yapabilirsin
select * from hareket where tarih>=:tarih1 and tarih<=:tarih2
query1.params[0].asdate:=strtodate('01.01.2004');
query1.params[1].asdate:=strtodate('31.12.2004');
şeklinde.
Kolay gelsin
Bu sorguyu sanirim edit kutularina girdigin tarih olarak yapacaksin. Query kullanarak
query1.sql.clear;
query1.sql.add('select * from Tablo tarih BETWEEN :tarih1 and
:tarih2');
query1.parambyname('tarih1').asdate := tarih;
query1.parambyname('tarih2').asdate := tarih;
query1.open;
veya
var
Tarih1, Tarih2 : TDate;
begin
query1.sql.clear;
query1.sql.add('Select * from Tablo');
query1.sql.add('Where TARIH Between :TARIH1 and :TARIH2');
query1.parambyname('TARIH1').asdate :=strtodate(edit1.text);
query1.parambyname('TARIH2').asdate :=strtodate(edit2.text);
gibi olmali
query1.sql.clear;
query1.sql.add('select * from Tablo tarih BETWEEN :tarih1 and
:tarih2');
query1.parambyname('tarih1').asdate := tarih;
query1.parambyname('tarih2').asdate := tarih;
query1.open;
veya
var
Tarih1, Tarih2 : TDate;
begin
query1.sql.clear;
query1.sql.add('Select * from Tablo');
query1.sql.add('Where TARIH Between :TARIH1 and :TARIH2');
query1.parambyname('TARIH1').asdate :=strtodate(edit1.text);
query1.parambyname('TARIH2').asdate :=strtodate(edit2.text);
gibi olmali
Elektrik-Elektronik Muhendisi
'2004.06.02' yazmanız da işi gorebileceği gibi sayin viper'in verdiği ornekteki gibi parametre kullanmak da işinizi rahatlıkla gorecektir... Format donusumleri ile ugrasmamak icin genelde tarih alanları soz konusu oldugunda parametre kullanırım....
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Afedersiniz;
Bizim çalışmamamızda sorgulamayı ado ile yapıyoruz. Acemi çalışması tabiki. sorgulamada;
s1,s2,s3,s4,s5,s6,s7:String;
b_OR,b_AND:Boolean;
begin
s1:=Edit1.Text;
s2:=Edit2.Text;
S3:=Edit3.Text;
s4:=Edit4.Text;
s5:=Edit5.Text;
s6:=Edit6.Text;
s7:=Edit7.Text;
b_OR:=(s1<>'') OR (s2<>'') OR (s3<>'') OR (s4<>'') OR (s5<>'') OR (s6<>'') OR (s7<>'');
b_AND:=false;
with AdoQuery1 do
begin
if Active then Close;
with SQL do
begin
Clear;
Add('Select*From EkSuc');
if b_OR then Add('Where');
if s1<>'' then add('(CERAİM_NO LIKE ''%'+s1+'%'')');
b_AND:=b_AND OR (S1<>'');
if b_AND AND(s2<>'') then Add('AND');
if s2<>'' then add('(İLÇE_NO LIKE ''%'+s2+'%'')');
b_AND:=b_AND OR (S2<>'');
if b_AND AND(s3<>'') then Add('AND');
if s3<>'' then add('(GELŞ_TARİH LIKE ''%'+s3+'%'')');
b_AND:=b_AND OR (S3<>'');
if b_AND AND(s4<>'') then Add('AND');
if s4<>'' then add('(ADI LIKE ''%'+s4+'%'')');
b_AND:=b_AND OR (S4<>'');
if b_AND AND(s5<>'') then Add('AND');
if s5<>'' then add('(SOYADI LIKE ''%'+s5+'%'')');
b_AND:=b_AND OR (S5<>'');
if b_AND AND(s6<>'') then Add('AND');
if s6<>'' then add('(BABA_ADI LIKE ''%'+s6+'%'')');
b_AND:=b_AND OR (S6<>'');
if b_AND AND(s7<>'') then Add('AND');
if s7<>'' then add('(ANA_ADI LIKE ''%'+s7+'%'')');
b_AND:=b_AND OR (S7<>'');
Add('ORDER BY GELŞ_TARİH');
end;
Open;
if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
end;
şeklinde komut kullanıyorum. Tablom dbaseIV ve tarih alanları karekter olarak belirlendi. Size leri 10. Yukarıdaki gibi tarih alın sorgulayınca bulma işini yapıyor. Bu komuta iki tarih arası sorgu yapmasını nasıl yerleştiririz
iyi çalışmalar saygılar
Bizim çalışmamamızda sorgulamayı ado ile yapıyoruz. Acemi çalışması tabiki. sorgulamada;
s1,s2,s3,s4,s5,s6,s7:String;
b_OR,b_AND:Boolean;
begin
s1:=Edit1.Text;
s2:=Edit2.Text;
S3:=Edit3.Text;
s4:=Edit4.Text;
s5:=Edit5.Text;
s6:=Edit6.Text;
s7:=Edit7.Text;
b_OR:=(s1<>'') OR (s2<>'') OR (s3<>'') OR (s4<>'') OR (s5<>'') OR (s6<>'') OR (s7<>'');
b_AND:=false;
with AdoQuery1 do
begin
if Active then Close;
with SQL do
begin
Clear;
Add('Select*From EkSuc');
if b_OR then Add('Where');
if s1<>'' then add('(CERAİM_NO LIKE ''%'+s1+'%'')');
b_AND:=b_AND OR (S1<>'');
if b_AND AND(s2<>'') then Add('AND');
if s2<>'' then add('(İLÇE_NO LIKE ''%'+s2+'%'')');
b_AND:=b_AND OR (S2<>'');
if b_AND AND(s3<>'') then Add('AND');
if s3<>'' then add('(GELŞ_TARİH LIKE ''%'+s3+'%'')');
b_AND:=b_AND OR (S3<>'');
if b_AND AND(s4<>'') then Add('AND');
if s4<>'' then add('(ADI LIKE ''%'+s4+'%'')');
b_AND:=b_AND OR (S4<>'');
if b_AND AND(s5<>'') then Add('AND');
if s5<>'' then add('(SOYADI LIKE ''%'+s5+'%'')');
b_AND:=b_AND OR (S5<>'');
if b_AND AND(s6<>'') then Add('AND');
if s6<>'' then add('(BABA_ADI LIKE ''%'+s6+'%'')');
b_AND:=b_AND OR (S6<>'');
if b_AND AND(s7<>'') then Add('AND');
if s7<>'' then add('(ANA_ADI LIKE ''%'+s7+'%'')');
b_AND:=b_AND OR (S7<>'');
Add('ORDER BY GELŞ_TARİH');
end;
Open;
if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
end;
şeklinde komut kullanıyorum. Tablom dbaseIV ve tarih alanları karekter olarak belirlendi. Size leri 10. Yukarıdaki gibi tarih alın sorgulayınca bulma işini yapıyor. Bu komuta iki tarih arası sorgu yapmasını nasıl yerleştiririz
iyi çalışmalar saygılar
belki konuyla alakası yok ama şu kodları
alanına yazarsak daha guzel olmazmı
aslında Admin Kardeşim bu zamana kadar soyler diye düşünmüştüm ama o da öyle yazmış
yanı burdan kodları ayırt etmeye çalışmak zor oluyor da ondan...
birde sayın Admin kardeşten bunuda forum kurallarına eklemesini talep ediyorum...
Kod: Tümünü seç
kod
aslında Admin Kardeşim bu zamana kadar soyler diye düşünmüştüm ama o da öyle yazmış


yanı burdan kodları ayırt etmeye çalışmak zor oluyor da ondan...
birde sayın Admin kardeşten bunuda forum kurallarına eklemesini talep ediyorum...
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz
Erkan ÇAĞLAR
Tabi ki daha güzel olur. Bu olay için de bir kaç kez uyarı mesajı atmıştık ama dalgınlığa geliyor herhalde
Biraz daha dikkat. Bir şeyler yazmak önemli de okunabilir olması daha önemli.
Kodlar [/code]
içine yazılırsa daha okunaklı olur


Kodlar
Kod: Tümünü seç
[code]
içine yazılırsa daha okunaklı olur

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Özür diliyorum ve düzeltiyorum sorgulamayı ado ile yapıyorum ve tablo daki tarih alanların "C" karakter olarak belilendi. DbaseIV kullanıyorum. Tarih karakter uzunluğu 10 olarak belirttim. Şimdi ado ile yaptığım sorgulamada tarih alanlarınıda sorguladığımda sonuç alabiliyorum. sıkıntım arkadaşın ki gibi iki tarih arasındaki verileri sorgulayıp gridde gösterme.
Viper' in kodlarını denedim ama tarih1 veya tarih2 gibi alanları bulamadığını söylüyor. Tablo adım "Raporlar" sorgulamak istediğim alan adı ise "INCTARIHI" bunu yapabilirmiyiz. çünkü alan özelliğim karakter ve size uzunluğu 10.
Viper' in kodlarını denedim ama tarih1 veya tarih2 gibi alanları bulamadığını söylüyor. Tablo adım "Raporlar" sorgulamak istediğim alan adı ise "INCTARIHI" bunu yapabilirmiyiz. çünkü alan özelliğim karakter ve size uzunluğu 10.
Kod: Tümünü seç
s1,s2,s3,s4,s5,s6,s7:String;
b_OR,b_AND:Boolean;
begin
s1:=Edit1.Text;
s2:=Edit2.Text;
S3:=Edit3.Text;
s4:=ComboBox1.Text;
s5:=ComboBox2.Text;
s6:=ComboBox3.Text;
s7:=ComboBox4.Text;
b_OR:=(s1<>'') OR (s2<>'') OR (s3<>'') OR (s4<>'') OR (s5<>'') OR (s6<>'') OR (s7<>'');
b_AND:=false;
with AdoQuery1 do
begin
if Active then Close;
with SQL do
begin
Clear;
Add('Select*From Raporlar');
if b_OR then Add('Where');
if s1<>'' then add('(RAPORNO LIKE ''%'+s1+'%'')');
b_AND:=b_AND OR (S1<>'');
if b_AND AND(s2<>'') then Add('AND');
if s2<>'' then add('(MUSADSOYAD LIKE ''%'+s2+'%'')');
b_AND:=b_AND OR (S2<>'');
if b_AND AND(s3<>'') then Add('AND');
if s3<>'' then add('(INCTARIHI LIKE ''%'+s3+'%'')');
b_AND:=b_AND OR (S3<>'');
if b_AND AND(s4<>'') then Add('AND');
if s4<>'' then add('(IZDURUMU LIKE ''%'+s4+'%'')');
b_AND:=b_AND OR (S4<>'');
if b_AND AND(s5<>'') then Add('AND');
if s5<>'' then add('(TESPDURUMU LIKE ''%'+s5+'%'')');
b_AND:=b_AND OR (S5<>'');
if b_AND AND(s6<>'') then Add('AND');
if s6<>'' then add('(MAHALLEADI LIKE ''%'+s6+'%'')');
b_AND:=b_AND OR (S6<>'');
if b_AND AND(s7<>'') then Add('AND');
if s7<>'' then add('(ISTOLYTURU LIKE ''%'+s7+'%'')');
b_AND:=b_AND OR (S7<>'');
Add('ORDER BY RAPORNO');
end;
Open;
if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
end;
[/b]
olmuyorrrrr
ölçüt ifadesinde veri uyuşmazlığı ne demek yaaaaa???!!!!
delirecemm
Adoquery1.SQL.clear;
Adoquery1.SQL.Add('select * from itfmuayene where tarih between "01.07.2004" and "03.07.2004" ');
Adoquery1.open;
bu şekilde yazınca bile hata veriyor...çıldırcam....
acces ile yapıyorum kaydı...ve db de tarih alanı metin değil tarih şeklinde tanımlı....
yardım lütfen.....
delirecemm
Adoquery1.SQL.clear;
Adoquery1.SQL.Add('select * from itfmuayene where tarih between "01.07.2004" and "03.07.2004" ');
Adoquery1.open;
bu şekilde yazınca bile hata veriyor...çıldırcam....
acces ile yapıyorum kaydı...ve db de tarih alanı metin değil tarih şeklinde tanımlı....
yardım lütfen.....
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
dostum delphi de acemiyim ama ben paradox tabloda, query nesnesi kullanarak sorunumu şu şekilde çözdüm ve çalışmıştı...
tarihleri win32 conponentinden DATE TİME PİCKER nesnesi ile aldım.
çünki yazım formatının 16.08.2004 olması gerektiği için kullanıcı bazen " ." yerine "," kullanabiliyordu.
Seçtiği tarihleri de değişkene attım.(tabi iki tarih arası olduğu için iki tane DATE TİME PİCKER nesnesi kullandım.(acemi adamız.şimdilik bu kadar yapabiliyoz)
(ben tarih1 ve tarih2 değişkenlerini string tipte tanımlamıştım)
Daha önce üstadlar aynı cevabı vermişler ama belki faydası olabilir diye kullandığım kodu yazayım dedim..
Umarım bir faydası olur.
tarihleri win32 conponentinden DATE TİME PİCKER nesnesi ile aldım.
çünki yazım formatının 16.08.2004 olması gerektiği için kullanıcı bazen " ." yerine "," kullanabiliyordu.
Seçtiği tarihleri de değişkene attım.(tabi iki tarih arası olduğu için iki tane DATE TİME PİCKER nesnesi kullandım.(acemi adamız.şimdilik bu kadar yapabiliyoz)
Kod: Tümünü seç
tarih1:=datetostr(DATE_TIME_PICKER1);
tarih2:=datetostr(DATE_TIME_PICKER2);
query1.close;
query1.sql.clear;
query1.sql.add('select * from tablo');
query1.sql.add('where tarih > '''+tarih1+'''');
query1.sql.add('and tarih < '''+tarih2+'''');
query1.open;
Daha önce üstadlar aynı cevabı vermişler ama belki faydası olabilir diye kullandığım kodu yazayım dedim..
Umarım bir faydası olur.