Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#4

AW: ADO Connection Timeout

  Alt 4. Okt 2021, 13:39
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.

Geändert von Delphi.Narium ( 4. Okt 2021 um 13:40 Uhr) Grund: Schreibfehler ...
  Mit Zitat antworten Zitat