Dashier geht unter
SQL normalerweise nicht:
Status = NULL
In allen mir bekannten
SQL-Varianten heißt das
Status is NULL
.
Mich irritiert das with, hab' das mal umgeschrieben, so in der Art, wie es bei mir vermutlich aussehen würde (aber ungetestet):
Delphi-Quellcode:
function GetGesamtpreis(
ADO : TADOQuery; Belegnummer :
String; Steuer1 : Integer) : Currency;
begin
// Statt .Value lieber den korrekten Datentyp nehmen - wegen Typsicherheit.
ADO.Parameters.ParamByName('
P1').AsString := Belegnummer;
ADO.Parameters.ParamByName('
P2').AsInteger := Steuer1;
// Ist das in der DB ein VarChar oder so?
ADO.Parameters.ParamByName('
P3').AsString := '
0';
ADO.Open;
Result :=
ADO.Fields[0].AsCurrency;
ADO.Close;
end;
begin
ADO.Close;
ADO.Sql.Clear;
ADO.Sql.Add('
select Sum(IsNull(GesamtPreis,0)) as GesamtPreis from BelegP');
ADO.Sql.Add('
where Belegnummer = :P1');
ADO.Sql.Add('
and (Status = 0 or Status is NULL)');
ADO.Sql.Add('
and Steuersatz = :P2');
ADO.Sql.Add('
and Kennzeichen = :P3');
// Hier die Schleife:
for i := 0
to Stringlist.Count - 1
do begin
// Woimmer jetzt auch Belegnummer herkommt
irgendeinevariabel := GetGesamtpreis(
ADO, Stringliste[i], MainMenu.Steuer1);
end;
end;
Sinn der parametrisierten Abfrage ist es ja (u. a.), dass das
SQL nicht jedesmal neu zusammengebaut werden muss, sondern nur einmalig. Danach werden nur noch die Parameter je Abfrage entsprechend gesetzt.