Hallo Schattenmann, bei mir funktioniert das:
Delphi-Quellcode:
// uses DateUtils;
function TDemoForm.ProjectedSum(year, month: Word): Extended;
const
SEL
= '
SELECT SUM(CAST(endpreis as float)) '
+ '
FROM verkaeufe WHERE CAST(Angebotsende as date) '
+ '
BETWEEN :tag_von AND :tag_bis'
;
var
dtPrimo, dtUltimo: TDateTime;
begin
dtPrimo := EncodeDate(year, month, 1);
dtUltimo := EncodeDate(year, month, DaysInAMonth(year, month));
with QProjectedSum
do
begin
SQL.Text := sel;
// muss eigentlich nur einmal gemacht werden
ParamByName('
tag_von').AsDate := dtPrimo;
ParamByName('
tag_bis').AsDate := dtUltimo;
Open;
Result := Fields[0].AsFloat;
Close;
end;
end;
Allerdings würde ich die Tabelle so umformen, dass ENDPREIS als Währungsbetrag ($) gespeichert wird, da der Dezimalpunkt umkonfiguriert werden kann und das Programm dann nicht mehr funktioniert. Auch das Angebotsende sollte aus den gleichen Gründen den richtigen Feldtyp haben. Du kannst die Tabelle mit dem Tool Datenbankoberfläche umformen. Mache es mit einer Kopie, damit du auf eventuelle Fehler reagieren kannst. Wenn du eine dedizierte
Query-Komponente spendierst, dann muss der
SQL-Text nicht jedesmal neu gesetzt werden.
Grüße vom marabu