Arkadaşlar çözemedim!!! Adoquery de datetimepicker

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Arkadaşlar çözemedim!!! Adoquery de datetimepicker

Mesaj gönderen conari »

Delphi de Adoquey kullanıyorum.
sql sorgusuna ekler iken sorguda datetimepicker daki tarih aralığını vermem lazım fakat doğal olarak string tdate hatası alıyorum. bu bileşini sql içerisinde nasıl kullanabilirim. Veritabanı access between yermi tam onuda bilmiyorum açıçası deneyeceğim..

Kod: Tümünü seç

procedure TfrmRapor.BtnRaporgorClick(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA'+
'FROM TBLISTEK_ANA where '+
' TBLISTEK_ANA.TARIH between '''+date1.date+''' and '''+date2.date+''''+
' order by  TBLISTEK_ANA.TARIH asc');
ADOQuery1.Active:=True;

end;
En son conari tarafından 14 Eyl 2006 04:50 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ikut

Re: Adoquery de datetimepicker alanını kullanmak

Mesaj gönderen ikut »

conari yazdı:Delphi de Adoquey kullanıyorum.
sql sorgusuna ekler iken sorguda datetimepicker daki tarih aralığını vermem lazım fakat doğal olarak string tdate hatası alıyorum. bu bileşini sql içerisinde nasıl kullanabilirim. Veritabanı access between yermi tam onuda bilmiyorum açıçası deneyeceğim..

Kod: Tümünü seç

procedure TfrmRapor.BtnRaporgorClick(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA'+
'FROM TBLISTEK_ANA where '+
' TBLISTEK_ANA.TARIH between '''+date1.date+''' and '''+date2.date+''''+
' order by  TBLISTEK_ANA.TARIH asc');
ADOQuery1.Active:=True;

end;
access te query builder e gird ve tarih aralığında listeyi access içinden al. doğal olarak orda sql kodunu verecektir. sana... sana düşen ise dypickerdaki tarihi o formata uydurmak.

örneğin db2 tarihler yyyyaagg şeklinde tutuyor. haliykle bende dtpickerdakini

stinge çevirip gerekli string manipulasyonuna uygulayarak veriyorum vt ye. sorun kalmıyor.. ama dediğim bu konu senin vt ye göre göreceli. ona göre idkkat
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

kodu hallettim ama veritipi uyuşmazlığı veriyor .
Date alanım(access)
Biçim =Kısa Tarih
Giriş Maskesi =00.00.0000;0;_
Şeklinde..


Kod: Tümünü seç

procedure TfrmRapor.BtnRaporgorClick(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA'+
' FROM TBLISTEK_ANA'+
' Where TBLISTEK_ANA.TARIH Between '''+DateToStr(Date1.date)+ ''' and '''+ DateToStr(Date2.date) +'''');
ShowMessage(ADOQuery1.SQL.Text);
ADOQuery1.Active:=True;
end;
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Kod: Tümünü seç

var
tarih1, tarih2 :String;
begin
tarih1 := DateToStr(DateTimePicker1.Date);
tarih2 := DateToStr(DateTimePicker2.Date);
tarih1 := '#'+ AnsiReplaceStr(tarih1,'.','/') +'#';
tarih2 := '#'+ AnsiReplaceStr(tarih2,'.','/') +'#';
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('Select * from Tablo where Tarih BetWeen '+ tarih1 +' and '+ tarih2);
AdoQuery1.Open;
Şeklinde çalıştırıyorum.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Senin dediğin şekilde denedim.

Kod: Tümünü seç

procedure TfrmRapor.BtnRaporgorClick(Sender: TObject);
var
tarih1, tarih2 :String;
begin
Frmrapquery.Active:=False;
SayQuery.Active:=False;
tarih1 := DateToStr(DateTimePicker1.Date);
tarih2 := DateToStr(DateTimePicker2.Date);
tarih1 := '#'+ AnsiReplaceText(tarih1,'.','/') +'#';
tarih2 := '#'+ AnsiReplaceText(tarih2,'.','/') +'#';
Frmrapquery.SQL.Clear;
SayQuery.SQL.Clear;
Frmrapquery.SQL.text:='SELECT  TBLISTEK_ANA.ISTEK_SECIM, count (TBLISTEK_ANA.TARIH) FROM TBLISTEK_ANA'+
' WHERE TBLISTEK_ANA.TARIH between '+tarih1+' And '+tarih2+''+
' group by TBLISTEK_ANA.ISTEK_SECIM ;';
SayQuery.SQL.text:='SELECT  count (TBLISTEK_ANA.TARIH)  FROM TBLISTEK_ANA '+
' WHERE TBLISTEK_ANA.TARIH between '+tarih1+' And '+tarih2+';';
SayQuery.Active:=True;
Frmrapquery.Active:=True;
end;
Fakat Datetimepicker alananı 17/01/2007 şeklinde dönüyor.
Ama datam bu şekilde..15.09.2006
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

@İkut'un dediğine yakın bir şekilde çözüyorum gibi.

Kod: Tümünü seç

ay1:=MonthOf(DateTimePicker1.Date);
gun1:=DayOf(DateTimePicker1.Date);
yil1:=YearOf(DateTimePicker1.Date);
ay2:=MonthOf(DateTimePicker2.Date);
gun2:=DayOf(DateTimePicker2.Date);
yil2:=YearOf(DateTimePicker2.Date);
tarih1:='#'+IntToStr(ay1)+'/'+IntToStr(gun1)+'/'+IntToStr(yil1)+'#';
tarih2:='#'+IntToStr(ay2)+'/'+IntToStr(gun2)+'/'+IntToStr(yil2)+'#';
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Veri tabanı olarak access kullanıyorsanız tarih formatı bu şekilde olmalı. Accesste tarih bölümleri xx/xx/xxxx şeklinde döner. Ama çalışırda :)
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Özellikle tarihle ilgili sorgularda parametre kullanmanızı tavsiye ederim. Çünkü bildiğim kadarıyla Access'den gelen tarih bilgisi sistemin ayarlarına göre değişiyor. Dolayısıyla bölgesel ayarları US (veya başka bir ülke) olarak ayarlanmış bir sistemde sorun çıkacaktır. (Örneğin Netbeans kurmak için bölgesel ayarları US'e çevirmeniz gerekiyor).

Forumda Params diye aratacak olursanız bulacaksınızdır. Kullanımı ise çok kolaydır, AdoQuery.Params.ParamByName['ParametreAdi'].Value := Date; gibi bir şey. Şu an kullandığım bilgisayarda Delphi olmadığı için kontrol edemiyorum, ama eğer forumda bulamazsanız (ki bu çok zor :) ) örnek kod gönderirim.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Yok arkadaşlar olay sanki gün ile ay yerdeğiminde Sorgu ile data karşılaştırmasında ay ile günler farklı sırada nasıl olmuş anlayamadım.
Ben de Fonk. ile ay gün yıl yapıyorum şimdilik bu şekilde bir geçici çözüm buldum.
Paramby olayını biliyorum ama kullanmış değilim. Ama BDE olayı artık out olmaya başladığı için Ado olaylarına iyice bir el atmaya başlayacağım.

Kod: Tümünü seç

ay1:=MonthOf(DateTimePicker1.Date); 
gun1:=DayOf(DateTimePicker1.Date); 
yil1:=YearOf(DateTimePicker1.Date); 
ay2:=MonthOf(DateTimePicker2.Date); 
gun2:=DayOf(DateTimePicker2.Date); 
yil2:=YearOf(DateTimePicker2.Date); 
tarih1:='#'+IntToStr(ay1)+'/'+IntToStr(gun1)+'/'+IntToStr(yil1)+'#'; 
tarih2:='#'+IntToStr(ay2)+'/'+IntToStr(gun2)+'/'+IntToStr(yil2)+'#';
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Parametre olayı BDE'ye özgü bir şey değil, ADO ile de Parameter kullanabilirsin ve tarih sorgulamalarında kullanmalısın.

Bence ADOQuery'nin Params kısmını bir incele, sadece 5 dakikanı alacaktır.

Kolay gelsin,
Bahadır Alkaç
eliteprogrammer
Üye
Mesajlar: 12
Kayıt: 15 Ara 2005 03:52

Re: Arkadaşlar çözemedim!!! Adoquery de datetimepicker

Mesaj gönderen eliteprogrammer »

conari yazdı:Delphi de Adoquey kullanıyorum.
sql sorgusuna ekler iken sorguda datetimepicker daki tarih aralığını vermem lazım fakat doğal olarak string tdate hatası alıyorum. bu bileşini sql içerisinde nasıl kullanabilirim. Veritabanı access between yermi tam onuda bilmiyorum açıçası deneyeceğim..

Kod: Tümünü seç

procedure TfrmRapor.BtnRaporgorClick(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA'+
'FROM TBLISTEK_ANA where '+
' TBLISTEK_ANA.TARIH between '''+date1.date+''' and '''+date2.date+''''+
' order by  TBLISTEK_ANA.TARIH asc');
ADOQuery1.Active:=True;

end;

ADOQuery1.Active:=True;

bu bölümden önce ;
1. seçenek ;

ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA FROM TBLISTEK_ANA where TBLISTEK_ANA.TARIH between :a1 and :a2 order by TBLISTEK_ANA.TARIH asc');


adoquery1.parameters.parambyname('a1').value:=formatdatetime('dd.mm.yyyy',date1.date);

adoquery1.parameters.parambyname('a2').value:=formatdatetime('dd.mm.yyyy',date2.date);

2. seçenek ;

ADOQuery1.SQL.Add('SELECT TBLISTEK_ANA.TARIH, TBLISTEK_ANA.ISTEK_SECIM, TBLISTEK_ANA.EK_ACIKLAMA FROM TBLISTEK_ANA where TBLISTEK_ANA.TARIH>:a1 and TBLISTEK_ANA.TARIH<:a2 order by TBLISTEK_ANA.TARIH asc');

adoquery1.parameters.parambyname('a1').value:=formatdatetime('dd.mm.yyyy',date1.date-1);

adoquery1.parameters.parambyname('a2').value:=formatdatetime('dd.mm.yyyy',date2.date+1);

bunlardan sonra da

ADOQuery1.Active:=True;


kolay gelsin ..
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

adoquery1.parameters.parambyname('a1').value:=formatdatetime('dd.mm.yyyy',date1.date);
adoquery1.parameters.parambyname('a2').value:=formatdatetime('dd.mm.yyyy',date2.date);
Buradaki FormatDateTime fonksiyonu yanlış denebilecek kadar gereksiz. Tamam, kodlama olarak doğrudur, bir şey diyemeyiz, ama Tarih alanlarını stringe çevireceksek niye parametre kullanıyoruz? Direkt SQL cümlesine yazarız ve fazladan iki satır kod yazmaktan kurtuluruz.

Parametre kullanmaktaki en büyüj avantaj, tarih gibi her sistemde farklı olabilecek bir değerin standart bir değer olarak gönderilebilmesi. O yüzden sadece şunu şekilde yazılması yeterli ve daha doğrudur.

Kod: Tümünü seç

adoquery1.parameters.parambyname('a1').value:=date1.date;
adoquery1.parameters.parambyname('a2').value:=date2.date; 
Kolay gelsin,
Bahadır Alkaç
Karamizrak
Üye
Mesajlar: 39
Kayıt: 18 Oca 2005 05:41

Mesaj gönderen Karamizrak »

Arkadaslar bu datetime olayında bende cok takıldım ama su sekilde sorunu giremiştim. parametre kullanarak

Kod: Tümünü seç

 With ADOQuery1 do begin
Close;
sql.Clear;
SQL.add('SELECT CIKIS.ADI_SOYADI,CIKIS.TUR_ADI,CIKIS.TOPLAM_TUTAR,CIKIS.ISKONTO,CIKIS.CIKIS_SAAT,CIKIS.CIKIS_TARIH,CIKIS.UCRET,CIKIS.PARA_BIRIMI,CIKIS.DURUMU');
sql.Add('      ,CIKIS.BILET_NO,TUR.P_BIRIMI,(CIKIS.TOPLAM/DOVIZ.DOVIZ_KURU)  AS TOPLAMeuro FROM CIKIS,DOVIZ,TUR WHERE DOVIZ.DOVIZ_ADI=CIKIS.PARA_BIRIMI and TUR.TUR_ADI=CIKIS.TUR_ADI AND CIKIS.CIKIS_TARIH> :T01 and CIKIS.CIKIS_TARIH< :T02 and  CIKIS.TUR_ADI like '''+edit1.Text+'%''');

Parameters.ParamByName('T01').DataType := ftDate;
Parameters.ParamByName('T01').Value := datetimepicker1.date;
Parameters.ParamByName('T02').DataType := ftDate;
Parameters.ParamByName('T02').Value := DateTIMEPicker2.DATE;
Open;
end;
sanırım bu işinizi gorur.
Cevapla