Adotable iki tarih arası filtreleme yardım...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
safakgunay
Üye
Mesajlar: 10
Kayıt: 10 Oca 2014 09:49

Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen safakgunay »

Ustadlar merhaba,
Yapmaya calıstıgım programda acces veri tabanında hesap tablosundaki kayıtları combobox kullanarak secili aya gore filtrelemek ama birturlu beceremedim
delphi7 adotable kullanıyorum.

Kod: Tümünü seç

procedure TForm1.ComboBox1Change(Sender: TObject);
var
ilk:string;
son:string;
begin
     begin
if ComboBox1.ItemIndex=0 then
 begin
QRLabel2.Caption:=inttostr(CurrentYear)+' - Ocak Ayına Ait Kayıtlar Gosteriliyor';
ilk:='01.01.'+inttostr(CurrentYear)+' 00:00:00';
son:='31.01.'+inttostr(CurrentYear)+' 00:00:00';
 hesap.Filtered:=false;
hesap.Filter:='zaman>='+ QuotedStr(ilk) + ' AND zaman<='+ QuotedStr(son);
hesap.Filtered:=true;
   end;
  end;  begin
if ComboBox1.ItemIndex=1 then begin
.
.
.
kod hata vermiyot ama filtrelemede yapmıyor.
hesap adotablenın adı
zaman alanında kayıtlar 10.01.2014 21:09:57 seklinde,
yardımlarınız için şimdiden tesekkurler.
safakgunay
Üye
Mesajlar: 10
Kayıt: 10 Oca 2014 09:49

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen safakgunay »

ustadlar veri tabanındaki zaman alanını tarih ve saat olarak ikiye ayırdım
tarih alanına kısa tarih formatında kayıt yapıyorum ve asagıdaki kodla filtrelemeye calısıyorum ama 1. ay için filtreleme normal calısırken ikinci ay için filtreleme yaptıgımda dbgridde hiç kayıt gorunmuyor sebebi ne olabilir acaba?

Kod: Tümünü seç

   
  begin
if ComboBox1.ItemIndex=0 then
 begin
QRLabel2.Caption:=inttostr(CurrentYear)+' - Ocak Ayına Ait Kayıtlar Gosteriliyor';
ilk:='01.01.'+inttostr(CurrentYear);
 son:= (IntToStr(DaysInMonth(StrToDate(ilk))))+'.01.'+inttostr(CurrentYear);
 hesap.Filtered:=false;
hesap.Filter:='tarih>='+ QuotedStr(ilk) + ' AND tarih<='+ QuotedStr(son);
hesap.Filtered:=true;

   end;
  end;
  begin
if ComboBox1.ItemIndex=1 then begin
QRLabel2.Caption:=inttostr(CurrentYear)+ ' - Şubat Ayına Ait Kayıtlar Gosteriliyor';
ilk:='01.02.'+inttostr(CurrentYear);
 son:= (IntToStr(DaysInMonth(StrToDate(ilk))))+'.02.'+inttostr(CurrentYear);
 hesap.Filtered:=false;
hesap.Filter:='tarih>='+ QuotedStr(ilk) + ' AND tarih<='+ QuotedStr(son);
  hesap.Filtered:=true;

 end;
kafayı sıyıracam artık lutfen bi fikir verin :)
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen omurolmez »

Doğrudan problemin çözümü değil ama işinizi kolaylaştıracak iki madde yazmak istiyorum:

Eğer sorguları siz oluşturacaksanız, şu şekilde çalışırsanız daha rahat edersiniz :

Kod: Tümünü seç

Adotable1.Sql.Text :=Format('select * from tablo1 where tarih1=''%s'' and ''%s'' ', [tarih1, tarih2]);
.
Daha da iyisi parametre kullanın. Böylece, tırnaklarla, ondalık ayracındaki yerel ayarlarla ve tarih biçimiyle uğraşmazsınız. Örneğin:

Kod: Tümünü seç

Adotable1.Sql.Text :='select * from tablo1 where tarih=:parametre1 and sayi=:parametre2 and metin=:parametre3';
Adotable1.Params[0].AsDateTime :=ATarih; //TDateTime tipinde
Adotable1.Params[1].AsFloat :=9.5;
Adotable1.Params[2].AsString :='Portakallı Ördek';
Adotable1.Active :=true;
Ömür Ölmez
safakgunay
Üye
Mesajlar: 10
Kayıt: 10 Oca 2014 09:49

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen safakgunay »

ilgniz için cok tesekkurler
adotable'ye sql sorgusu yazamıyoruz sanırım, birde adoquery ile kotu anılarım oldugundan uzak durmaya calısıyorum,
anlamadıım yazdıgım kodda 30 ve 31 gun olan aylarda normal calısıyor fakat subar ayında takılıyor bi anlam veremedim ya :)
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen csunguray »

Daha önce şöyle bir kod yazmışım:

Kod: Tümünü seç

    ADOQuery1.SQL.Text := 'select * from TBL_TABLO where TARIH < ' + '#' + FormatDateTime('yyyy-mm-dd', Date + 1) + '#' + ' and TARIH >= ' + '#' + FormatDateTime('yyyy-mm-dd', Date) + '#' + ' order by TARIH, FIS_NO';
Tarihin başına ve sonuna # işareti koymanız gerekiyor.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
safakgunay
Üye
Mesajlar: 10
Kayıt: 10 Oca 2014 09:49

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen safakgunay »

Tarihte soz dizimi hatası diye hata mesajı veriyor ustadlar
sql li edite aktardıgımda gorunun sql cumlecigi
select * from hesap where tarih <= #31.01.2014# and tarih >= #01.01.2014# order by tarih
şeklinde,
bu İşi ado table kullanarak yapmanın bir yol yokmu acaba sql ve adoquery kullanmak istemiyorum.
ilginize tesekkurler
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen mrmarman »

Tarihleri parametre ile kullanın. Neden string ifadeler ile uğraşasanız ki.. Yarın her yöneldiğiniz veritabanı tipinde farklı sorunlar yaşarsınız.

Örnek :

Kod: Tümünü seç

ADOQuery1.SQL.Text := 'select * from TBL_TABLO where TARIH <= :d0 and TARIH >= :d1 order by TARIH, FIS_NO';
Parameters.Param[0].DataType := ftDate;
Parameters.Param[0].DataType := StrToDate( IncDay( Int(Now), 1) );
Parameters.Param[1].DataType := ftDate;
Parameters.Param[1].DataType := StrToDate( Int(Now) );
Aslında between kullanmak daha rasyonel...

Kod: Tümünü seç

ADOQuery1.SQL.Text := 'select * from TBL_TABLO where TARIH between :d0 AND :d1 order by TARIH, FIS_NO';
Parameters.Param[0].DataType := ftDate;
Parameters.Param[0].DataType := StrToDate( Int(Now) );
Parameters.Param[1].DataType := ftDate;
Parameters.Param[1].DataType := StrToDate( IncDay( Int(Now), 1)  );

Dışardan yazıyorum, kodlarda hata yapmış olabilirim. Siz bu mihmalde bir araştırırsınız.'
Resim
Resim ....Resim
safakgunay
Üye
Mesajlar: 10
Kayıt: 10 Oca 2014 09:49

Re: Adotable iki tarih arası filtreleme yardım...

Mesaj gönderen safakgunay »

bir arkadasımın istegi uzerine kendi işyerinde kullanması için ufak bi programdı sadece :)
satılan urunleri ve stok durumunu takip ediyorum,
rapor senekleri var
Aylık iki tarih arası ve urun barkoduna gore filtrelemeleri adotable ile yapıyorum
aylık raporlama için tarihi string olarak filtrelemek istedigimde dogru calısmıyor fakat datatimepicker ile seçim yaptıgımdfa sorunusuz calısıyor,
sanırım aylık filtreleme secenegini kullanmayacagım
ilginiz için tesekkurler.
Cevapla