iki tarih arası sorgulama?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

iki tarih arası sorgulama?

Mesaj gönderen metemete »

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';
mcihad
Üye
Mesajlar: 283
Kayıt: 18 Tem 2003 03:28
Konum: Sivas

Mesaj gönderen mcihad »

hayır doğru :D iki tarih arasındaki sorguyu o şekilde yapabilirsin
Bize iyilik yaraşır.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

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;
gibi denemedim
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

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
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

SELECT *
FROM TABLO
WHERE TARIH BETWEEN '01.01.2004' AND '01.06.2004'

gibi de yapabilirsin.

Kolay gelsin.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Mesaj gönderen mepc »

Kullandığınız veritabanını yazmamışsanız

Acces için extra bir şey tarihlerin başına ve sonuna # karakteri koymanız gerekiyor.
Bilgi paylaşıldıkça güzeldir.
Viper
Üye
Mesajlar: 22
Kayıt: 29 Ağu 2003 09:34
İletişim:

Mesaj gönderen Viper »

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
Elektrik-Elektronik Muhendisi
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

Mesaj gönderen metemete »

Kullandığım veritabanı Sybase ASA9
sql kodda tarihi '02.06.2004' değil '02062004' yazmam gerekiyor yoksa hata veriyor.

Yardımlarınız için çok teşekkür ederim
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

'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... 8)
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

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
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

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ış :cry:

:lol:

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
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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

Kod: Tümünü seç

 [code] 
[/code]
içine yazılırsa daha okunaklı olur :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ö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.

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]
Misafir

olmuyorrrrr

Mesaj gönderen Misafir »

ö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.....
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Mesaj gönderen yusuf simsek »

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)

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;
(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.
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Cevapla