adoquery tarih sorgusu ve alan toplamı aldırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

aşağıdaki kodda iki tarih arası kayıtları listeliyorum. Listeleme yaparken veritabanımdaki 3 tane alanında toplamını aldırmak ve edit kutularına yazdırmak istiyorum. Yardımcı olursanız çok memnun olurum.
alan1, alan2, alan3 ---- para birimi olarak saklı access veritabanında. sum komutunu bir türlü doğru yazamadım. lütfen yardım. şimdiden teşekkürler.

procedure Traporlar.BitBtn3Click(Sender: TObject);
begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Fields.Clear;
AdoQuery1.SQL.add('SELECT * from fisler');
AdoQuery1.SQL.Add('WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")');
AdoQuery1.Parameters.ParamByName('@Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('@Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.SQL.Add('ORDER BY Fis_tarihi DESC' );
AdoQuery1.Open;



end;
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen tayipk »

merhaba sum yöntemini sana örnek kodla anlatmaya çalışacam dilim döndüğünce sen kendine göre uyarlarsın

Kod: Tümünü seç

adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.text:='select (sum(alan1)+sum(alan2)+sum(alan3)) as toplam from tablo where .....'; 
adoquery1.execsql;
kolay gelsin
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

procedure Traporlar.BitBtn3Click(Sender: TObject);
var
bakiye:real;
begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Fields.Clear;
AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler ';
AdoQuery1.SQL.Add('WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")');
AdoQuery1.Parameters.ParamByName('@Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('@Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.SQL.Add('ORDER BY Fis_tarihi DESC' );
AdoQuery1.Open;
Edit1.Text := FloatToStr(bakiye);

end;

SQL text ile başalayan satırda sum komutunu kullanıyorum, butono tıkladığımda şöyle bir hata veriyor.
Toplam bir işlevin bir parçası olarak belirtilen 'ezine_inek_alış' ifadesini içermeyen bir sorguyu yürütmeyi denediniz diyor.
Bir türlü komutu doğru yazmayı beceremedim. Yardımlarınızı bekliyorum. şimdiden teşekkürler.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen tayipk »

Kod: Tümünü seç

AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler ';
AdoQuery1.SQL.Add('WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")');
[/code]
bu iki satır arasındaki farkı görebildin mi?

adoquery.sql.text kullanıyorsun sonra Adoquery.sql.add kullanıyorsun. hata burda.

Kod: Tümünü seç

AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler '
                    +'WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")';
şeklinde olması gerekir
kolay gelsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

öncelikle ilgin için teşekkür ederim. Yukarıda yazdığın şekilde düzelttim fakat aynı hata mesajı almaya devam ediyorum.

var
bakiye:real;
begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Fields.Clear;
AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler ' + 'WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")';
AdoQuery1.Parameters.ParamByName('@Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('@Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.SQL.Add('ORDER BY Fis_tarihi DESC' );
AdoQuery1.Open;
Edit1.Text := FloatToStr(bakiye);
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen tayipk »

ss_mustafa yazdı:öncelikle ilgin için teşekkür ederim. Yukarıda yazdığın şekilde düzelttim fakat aynı hata mesajı almaya devam ediyorum.

var
bakiye:real;
begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Fields.Clear;
AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler ' + 'WHERE (fis_tarihi BETWEEN :@Tar1 and :@Tar2 and satici_adi Like"'+Combobox1.Text+'%")';
AdoQuery1.Parameters.ParamByName('@Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('@Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.SQL.Add('ORDER BY Fis_tarihi DESC' );
AdoQuery1.Open;
Edit1.Text := FloatToStr(bakiye);
Düzeltmemişsin eğer dikkatli bir şekilde bakarsan en altta yine SQL.Add kullanmışsın ayrıca teksatırda yazacaksan + parametresini kullanama gerek yok + parametresini alt satıra geçip yazmaya devam etmek için kullanırsın birde en altta ORDER BY komutunu da SQL text in en sonuna koy
yani kısacası

Kod: Tümünü seç

AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler WHERE fis_tarihi'
                   +' BETWEEN :Tar1 and :Tar2 and satici_adi Like'''+Combobox1.Text+'%'' ORDER BY Fis_tarihi DESC' ;
AdoQuery1.Parameters.ParamByName('Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.Open;
şeklinde düzeltip denermisin birde tırnak işaretini koyarken üşenipte çifttırnak koyma 3 tane yanyana tek tırnak koyacaksın.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

söylediğin şeylerin hepsine dikkat ederek, karekter karekter kontrol edip yaptım hala hata kodu alıyorum. Nasıl oluyor anlamadım.
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

procedure Traporlar.BitBtn3Click(Sender: TObject);
var
bakiye:real;
begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.text := 'select fis_tarihi, fis_no, musteri_adi, sum(ezine_inek_alis) as bakiye from fisler WHERE fis_tarihi'
+' BETWEEN :Tar1 and :Tar2 and satici_adi Like'''+Combobox1.Text+'%'' ORDER BY Fis_tarihi DESC' ;
AdoQuery1.Parameters.ParamByName('Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.Open;
Edit1.Text := FloatToStr(bakiye);
end;
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma

Mesaj gönderen ss_mustafa »

Yardım lütfen...

Formu açtığımda veritabanındaki bilgiler dbgrid içinde görünüyor. Fakat sum komutunu kullandığımda bütün dbgrid siliniyor sadece sum komutundaki toplam değer görünüyor. Sanırım programın verdiği hatada bundan kaynaklanıyor. Bu konuda bilgisi olan varsa yardımcı olabilirse çok sevinirim. Takıldım kaldım burada.

Şimdiden ilgilenen arkadaşlara teşekkür ediyorum.
ss_mustafa
Üye
Mesajlar: 10
Kayıt: 20 Eyl 2014 01:35

Re: adoquery tarih sorgusu ve alan toplamı aldırma (çözüldü)

Mesaj gönderen ss_mustafa »

Sorun çözüldü. Diğer arkadaşlarada belki yararlı olur diye kodların son hali aşağıdaki şekildedir.

Kod iki tarih arasındaki satıcının, satışlarının toplamını aldırıyor.

AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Fields.Clear;
AdoQuery1.SQL.text:= ('select sum(ezine_inek_satis) as satis,sum(ezine_inek_alis) as alis from fisler where satici_adi Like'''+Combobox1.Text+'%'' and fis_tarihi BETWEEN :Tar1 and :Tar2') ;
AdoQuery1.Parameters.ParamByName('Tar1').Value := DateToStr(DateTimePicker1.Date);
AdoQuery1.Parameters.ParamByName('Tar2').Value := DateToStr(DateTimePicker2.Date);
AdoQuery1.Open;

herkese kolay gelsin.
Cevapla