Kod: Tümünü seç
procedure TFrmCariHesaplari.YekunHesapla;
var MyQuerySQLCumlesi: widestring;
MyQuery: TIBQuery;
aramaparametre3, MyGroupBySQL: string;
begin
aramaparametre3 := TurkceKarakterAyarla(CMBCariler.Text);
MyQuerySQLCumlesi := 'SELECT '
+ 'SUM(BORC) AS BORCTOPLAMI'
+ ',SUM(ALACAK) AS ALACAKTOPLAMI'
+ ' FROM CARIHESAPLAR';
MyGroupBySQL := ' GROUP BY '
+ 'CARIHESAPLAR.GONDERENCARI,CARIHESAPLAR.TAKIPDURUMU';
MyQuery := TIBQuery.Create(Self);
MyQuery.Database := dm.IBDatabase1;
try
MyQuery.SQL.Clear;
MyQuery.SQL.Text := MyQuerySQLCumlesi
+ ' WHERE GONDERENCARI=:PARGONDERENCARI AND TAKIPDURUMU<>:MYYITIK'
+ MyGroupBySQL;
MyQuery.ParamByName('MYYITIK').AsSTRING := TurkceKarakterAyarla('YİTİK HESAP');
MyQuery.ParamByName('PARGONDERENCARI').AsString := aramaparametre3;
MyQuery.Open;
finally
MyQuery.free;
end;
end;
örnekle açıklayacak olursak
Hatalı hesaplama
GONDERENCARI TAKIPDURUMU BORC ALACAK
ABC HOLDING BEKLEMEDE 200 0
ABC HOLDING NULL 0 200
SONUÇ------>
GONDERENCARI BORCTOPLAMI ALACAKTOPLAMI
ABC HOLDING 200 0
Doğru hesaplama
Bunu aşmak için ne yapmalıyız.Şimdi şöyle söyleebilirsiniz.Veritabanında önemli alanların null kalmasına izin verme.GONDERENCARI TAKIPDURUMU BORC ALACAK
ABC HOLDING BEKLEMEDE 200 0
ABC HOLDING ODENDI 0 200
SONUÇ------>
GONDERENCARI BORCTOPLAMI ALACAKTOPLAMI
ABC HOLDING 200 200
Genelde bunu apmaya çalışıorum ama şu halde bu sorunu yapmak için ne gibi bir kod kullanmalıyız.Bilgisi olan arkadaşların yardımlarını bekliyorum.Teşekkürler....