Adoquery İki Tarih Arası Birden Fazla Sorgulama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

Merhaba
iki tarih arası sorgulama yapmak istiyorum fakat bir türlü çözemedim iki tarih arasında ad, soyad, gibi kriterlerde de var bir türlü çözemedim
aşağıdaki kod sadece eşit olan tabloları listeliyor ama tarihte sorun çıkartıyor yardımınız için şimdiden teşekkür ederim.

Kod: Tümünü seç

var
    Xstr:String;    
begin
    Xstr:='';   
    ADOQuery1.Close;    
    if Edit1.Text<>'' then
    Xstr:=Xstr+'adi='+QuotedStr(Edit1.Text)+' and ';
    if Edit2.Text<>'' then
    Xstr:=Xstr+'soyadi='+QuotedStr(Edit2.Text)+' and ';
    if Edit3.Text<>'' then
    Xstr:=Xstr+'tcno='+QuotedStr(Edit3.Text)+' and ';
    if Edit4.Text<>'' then
    Xstr:=Xstr+'anaadi='+QuotedStr(Edit4.Text)+' and ';
  
    if Length(Xstr)>0 then
    Xstr:='where '+LeftStr(Xstr,Length(Xstr)-5);    
    ADOQuery1.SQL.Text:='select * from ORNEK '+Xstr;
    ADOQuery1.Open;
 
end;
En son erdogan_ozkaya tarafından 12 Şub 2009 06:04 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: ADOQUERY İKİ TARİH ARASI BİRDEN FAZLA SORGULAMA

Mesaj gönderen conari »

Veritabanı nedir?
Birde forum kurallarını okursanız iyi olur. Yoksa mesajlarınız kilitlenir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: ADOQUERY İKİ TARİH ARASI BİRDEN FAZLA SORGULAMA

Mesaj gönderen erdogan_ozkaya »

Access veri tabanı kullanıyorum
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

özelllikle tarih alanlarını parametre olarak gönderin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

tüm kod bu başka yok yani bende
adı , soyadı , ve , doğum tarihi var çok kayıt olduğu için diyorumki örnek ; 01.01.1980 ile 01.01.1981 arasında doğan adı erdoğan olan soyadı özkaya olan kişileri listele.
not : sadece tarih aralığını yapıyom bi kodla veya sadece adı erdoğan yada soyadı özkaya olanı buluyorum ama ikisini bir yapamadım
bu arada editleri yada tarihleride boş geçebilirim sadece soyadı özkaya olanlar yada adı erdoğan olanlar diyebilirim edit boş ise boş geçsin ama doluysa sorgulasın.
kullandığım veritabanı access tarih veritabanında tarihSaat olarak seçili eğer örnek bir kod verirsen inan çok sevinirim 3 haftadır araştırıyorum ama bir türlü çıkamadım işin içinden

ilgin için çok teşekkür ederim

bu kod oluyor ama boş geçemiyorum yani mecburen hepsini doldurmak zorunda kalıyorum
_________________________________________________________________

Kod: Tümünü seç

procedure TForm10.SpeedButton4Click(Sender: TObject);
begin
 ADOTable1.Filter:=' dogumtarih > ' + #39 + DateToStr(DateTimePicker1.Date) + #39 +
 ' and dogumtarih < ' + #39 + DateToStr(DateTimePicker2.Date) + #39+
 ' and cinsiyet = ' + #39 + ComboBox1.Text + #39;
 ADOTable1.Filtered:=true;
   
    end;
________________________________________
En son erdogan_ozkaya tarafından 12 Şub 2009 06:03 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

tarih sorgulaması için bir check koy buna göre sorguna tarih kısıtınıda ekle. Veya tarihleri mevcut kayıtların ilk ve son tarihi olarak forma getir sorguna da bu şekilde ekle.
check işaretli ise ADD ile tarih kısıtınıda eklersin(aşağıdaki blogu)
Parametreli kullanırsan accessde problem olmuyor.

Kod: Tümünü seç

adoquery.SQL.Add('SELECT * from tablo WHERE (tarih BETWEEN :Tar1 and :Tar2)'); 
adoquery.Parameters.ParamByName('Tar1').Value := DateTimePicker1.Date; 
adoquery.Parameters.ParamByName('Tar2').Value := DateTimePicker2.Date; 
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

bu sadece tarih aralığı ben diyorumki iki tarih arasında doğun erkekler veya bayanlar veya adı erdoğan olanlar veya soyadı özkaya olanlar
bu kod sadece tarih aralığını veriyor
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

Sen benim demek istediğimi anlamadın herhalde.
Şimdi formda 2 tane tarih yokmu? var.
bu tarihlerden birinciye vtdeki en ufak tarih ikinciyede en büyük tarihi form create olduktan sonra getir. Sonra Sorguda bu SQL sorgusunu oluştur.

Kod: Tümünü seç

adoquery.SQL.Add('SELECT * from tablo WHERE (tarih BETWEEN :Tar1 and :Tar2)'); 
adoquery.Parameters.ParamByName('Tar1').Value := DateTimePicker1.Date; 
adoquery.Parameters.ParamByName('Tar2').Value := DateTimePicker2.Date; 
Kodun altına aşağıdakileri de ekle. Kullanıcı mesela AD text ine bir şey yazdı.

Kod: Tümünü seç

if EdAd.Text<>'' then
adoquery.SQL.Add(' and AD='+QuotedStr(EdAd.Text)+' ;
end;
bu şekilde diğer alanlarıda ekle.

Kod: Tümünü seç

if EdSoyad.Text<>'' then....
if EdTCno.Text<>'' then....
sorgun hazır.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

ya çok özür dilerim ama okadar uğraştımki inan anlayamadım yani dediğini denedim ama tarihleri es geçiyor acaba bir deneyebilirmisin

Kod: Tümünü seç

var
    Xstr:String;    
begin
    Xstr:='';    
    ADOQuery1.Close;     

ADOQuery1.SQL.Add('SELECT * from secmen WHERE (tarih BETWEEN :Tar1 and :Tar2)');
ADOQuery1.Parameters.ParamByName('Tar1').Value := DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('Tar2').Value := DateTimePicker2.Date;


    if Edit1.Text<>'' then
    Xstr:=Xstr+'adi='+QuotedStr(Edit1.Text)+' and ';
 
   if Edit2.Text<>'' then
    Xstr:=Xstr+'soyadi='+QuotedStr(Edit2.Text)+' and ';
   
    if Edit3.Text<>'' then
    Xstr:=Xstr+'tcno='+QuotedStr(Edit3.Text)+' and ';
    
    if Edit4.Text<>'' then
    Xstr:=Xstr+'anaadi='+QuotedStr(Edit4.Text)+' and ';
     
    if DBLookupComboBox1.Text<>'Hepsi' then
    Xstr:=Xstr+'dogumyeri='+QuotedStr(DBLookupComboBox1.Text)+' and ';
   
    if ComboBox1.Text<>'Hepsi' then
    Xstr:=Xstr+'cinsiyet='+QuotedStr(ComboBox1.Text)+' and ';

    if Length(Xstr)>0 then
    Xstr:='where '+LeftStr(Xstr,Length(Xstr)-5);    
    ADOQuery1.SQL.Text:='select * from kayitlar '+Xstr;
    ADOQuery1.Open;
    if ADOQuery1.Fields.Fields[0].Value= null then
    showmessage('                    Aradığınız Kriterlere uygun Kayıt Bulunamamıştır.                    ');
    if ADOQuery1.Fields.Fields[0].Value> null then
    ShowMessage('            Kriterlere Uygun  # ' + inttostr(ADOQuery1.RecordCount)+ ' #  Kişi Bulundu            ');
end;
En son erdogan_ozkaya tarafından 12 Şub 2009 05:59 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

Arkadaşım bune??? hangi tabloyu çekiyorsun ??

Kod: Tümünü seç

ADOQuery1.SQL.Text:='select * from kayitlar '+Xstr;

Kod: Tümünü seç

ADOQuery1.SQL.Add('SELECT * from secmen WHERE (tarih BETWEEN :Tar1 and :Tar2)');
Birde ADOQuery1.Close; dan sonra ADOQuery1.clear yapalım.

Kodları code tagına al forum kuralları..

Ayrıca benim örneğimde Xstr:String; diye bir şey yok yani bunu kullanmaya gerek yok!!
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

ikiside aynı sadece ornek
denedim fakat hata veriyor kardeş cahilliğime ver :) :? örnek kod olarak yazabilirmisin

Kod: Tümünü seç

  ADOQuery1.SQL.Add('SELECT * from secmen WHERE (dogumtarih BETWEEN :Tar1 and :Tar2)');
  ADOQuery1.Parameters.ParamByName('Tar1').Value := DateTimePicker1.Date;
  ADOQuery1.Parameters.ParamByName('Tar2').Value := DateTimePicker2.Date;

  if Edit1.Text<>'' then
  ADOQuery1.SQL.Add(' and adi='+QuotedStr(Edit1.Text)+' ;

  if Edit2.Text<>'' then
  ADOQuery1.SQL.Add(' and soyadi='+QuotedStr(Edit2.Text)+' ;
  if Edit3.Text<>'' then
  ADOQuery1.SQL.Add(' and tc='+QuotedStr(Edit3.Text)+' ;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

Query nin parameters kısmında parametrelerin tipini tarihe getirmelisiniz
birde hata mesajı nedir?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

yanlış türev hası veriyor veri tabanında tarih/saat olarak seçili bir başka denememde ise hiç işlem yapmıyor yani boş geçiyor
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen conari »

Object Inspector den
Adoquery inin Parameters kısmına tıkla orda tar1 ve tar2 yi göreceksin onların Datatype kısımlarını ftDateTime şekline getirmelisiniz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Adoquery İki Tarih Arası Birden Fazla Sorgulama

Mesaj gönderen erdogan_ozkaya »

kardeş sana örnek versem :) :)
http://rapidshare.com/files/197521332/ornek.rar.html
ilgin için çok teşekkür ederim
Cevapla