iki tarih arası sorgu ve toplam alamıyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
karakaya228
Üye
Mesajlar: 2
Kayıt: 11 Eki 2015 10:26

iki tarih arası sorgu ve toplam alamıyorum

Mesaj gönderen karakaya228 »

res111.JPG
res111.JPG (12.93 KiB) 2515 kere görüntülendi
Arkadaşlar select sum (tutar) from sat where TARIH>='01.11.2015' and TARIH<='05.11.2015' " bu sorgu delphi dışında dogru sonucu veriyor
ama delphi de bi türlü dogru çalışmıyor

aşagıdaki kodla iki tarih arası listeliyorum
istedigim şey satırların tutar alanını alt alta toplasın bunun için 'select sum (tutar) as toplam from sat' böyle bi kod yazıyorum yine olmuyor
sizce nasıl yapmalıyım


qryRapor.Active:=False;
qryRapor.Close;
qryRapor.SQL.Clear;
qryRapor.SQL.Text:= 'select * from sat ' + 'where TARIH>=' + ''''+DateToStr(DateTimePicker1.Date)+''''+ ' AND ' + ' TARIH<='+ ''''+DateToStr(DateTimePicker2.Date)+''''+ 'order by tarih ';

qryRapor.Active:=True;
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: iki tarih arası sorgu ve toplam alamıyorum

Mesaj gönderen xozcanx »

Kod: Tümünü seç

qryRapor.SQL.Text:= 
'select * from sat ' + 
'where TARIH>='+QuotedStr(FormatDateTime( 'yyyy-mm-dd',DateTimePicker1.Date)+
' AND  TARIH<='+QuotedStr(FormatDateTime( 'yyyy-mm-dd',DateTimePicker2.Date)+
'order by tarih ';
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
karakaya228
Üye
Mesajlar: 2
Kayıt: 11 Eki 2015 10:26

Re: iki tarih arası sorgu ve toplam alamıyorum

Mesaj gönderen karakaya228 »

Cevabın için teşekkür ederim kardeş
veri tabanı sutunlarım şu şekilde
paradox veritabanı

sırano----otomatik sayı +-
tarih-------date
ürünkod-----string
ürünadı------string
açıklama---string
adet-------integer
tutar-----currence
sıra no ve tarih index sutunlar
tam olarak yapmak istedigim şey iki tarih arası kayıtların tutarlarını almak istiyorum

aşagıdaki kod çalışıyor fakat sadece iki tarih arası listeleme yapıyor toplama yapmıyor
tutar alanının toplatıp nasıl yazdırabilirim acaba edit label dbgrid farketmez nereye yazdıgı
bu arada vermiş oldugunuz kadu çalıştıramadım
vereceginiz cevaplar için şimdiden Teşekkür ederim saygılarımla

qryRapor.Active:=False;
qryRapor.Close;
qryRapor.SQL.Clear;
qryRapor.SQL.Text:= 'select * from sat ' + 'where TARIH>=' + ''''+DateToStr(DateTimePicker1.Date)+''''+ ' AND ' + ' TARIH<='+ ''''+DateToStr(DateTimePicker2.Date)+''''+ 'order by tarih ';

qryRapor.Active:=True;
Dosya ekleri
res111.JPG
res111.JPG (12.93 KiB) 2502 kere görüntülendi
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: iki tarih arası sorgu ve toplam alamıyorum

Mesaj gönderen ertank »

Eğer database içinde Türkçe karakterler ile alan adı tanımlandı ise aşağıdaki gibi tek tırnak içinde yazman gerekebilir. Eğer tek tırnak ile hata alırsan çift tırnak ile deneyebilirsin. Kullandığın database'e göre format değişebilir. Türkçe karakter yoksa tırnak veya çift tırnak gerekmez.

Daha önce xozcanx 'in dediği gibi SQL içinde tarih formatı yıl-ay-gün şeklinde verilmesi gerekmektedir. DateToStr kullanmayıp FormatDateTime ile olması gereken formata dönüştürmen gerekir.

Kod: Tümünü seç

qryRapor.SQL.Text:= 'select ''ürünkod'',''ürünadı'',sum(adet),sum(tutar) from sat ' + 'where TARIH>=' + ''''+FormatDateTime('yyyy-mm-dd', DateTimePicker1.Date)+''''+ ' AND ' + ' TARIH<='+ ''''+FormatDateTime('yyyy-mm-dd', DateTimePicker2.Date)+''''+ 'order by tarih ';
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: iki tarih arası sorgu ve toplam alamıyorum

Mesaj gönderen xxxjedixxx »

Merhaba,

Tarih alanları için parametre kullanmanızı öneririm. Örnek olarak sadece where cümlesinden itibaren yazıyorum.

' ... Where tarih between :ptarih1 and :ptarih2 order by tarih';

qryRapor.Parameters.ParamValues['ptarih1'] := DateTimePicker1.Date;
qryRapor.Parameters.ParamValues['ptarih2'] := DateTimePicker2.Date;
qryRapor.Active := True;

Edit:
Ayrıca sorgunuzda toplam aldığınız alan ile birlikte başka alanlar da varsa "group by" cümlesini yazmalısınız.
Örneğin;
Select malzeme, sum(miktar) as ToplamMiktar from tablo where tarih between :ptarih1 and :ptarih2 group by malzeme order by malzeme
Bu sorgu malzeme malzeme toplamları getirir.

Select tarih, malzeme, sum(miktar) as TopMiktar from tablo where tarih between :ptarih1 and :ptarih2 group by tarih, malzeme order by tarih, malzeme
Bu sorgu da, tarih ve malzemeye göre toplamlar alır.

Ama sorguda daima tekil (unique) olan bir alanı da isterseniz (kayıt numarası gibi) aldığınız toplamın hiç bir anlamı olmaz, düz liste çekmiş gibi bir sonuç alırsınız. Sorguda toplamlar, tekrar eden verilere göre alınır (Malzeme, tarih, müşteri, satıcı vs).
Cevapla