![]() |
Datenbank: MSSQL • Version: 14 • Zugriff über: ADO
ADO Connection Timeout
Tag zusammen,
ich habe eine Stringlist mit Belegnummern, die ich in einer Schleife nachberechne. Die Prozedur zur Nachberechnung ist ganz klein und es sind auch nicht viele Records, dennoch läuft meine ADO Connection in einen Timout, aber nur beim letzten Eintrag der Stringlist (der ist auch nicht null). Die Prozedur geht ungefähr so:
Delphi-Quellcode:
An der Timeout Zeit kann es nicht liegen. Den RecordCount kann ich auch nicht abfragen, da bei SUM ja immer eine Zeile zurückgegeben wird. Hat jemand eine Idee, wieso es zum Timeout kommt? Für mich macht es keinen Sinn, da es auch nur beim letzten Eintrag passiert und davor durchläuft. Es handelt sich um einen MSSQL Server (lokal) mit Windows Server 2019.
with ADO do
begin Close; Sql.Clear; Sql.Add('select SUM(GesamtPreis) AS GesamtPreis FROM BelegP WHERE Belegnummer =:P1 AND (Status = 0 OR Status = NULL) AND Steuersatz = :P2 AND Kennzeichen =:P3'); Parameters.ParamByName('P1').Value := Belegnummer; Parameters.ParamByName('P2').Value := MainMenu.Steuer1; Parameters.ParamByName('P3').Value := '0'; Open; result := IfNull(FieldByName('GesamtPreis').Value, 0); end; Danke vorab für jede Hilfe Viele Grüße |
AW: ADO Connection Timeout
Also den Recordcount kannst du natürlich indirekt ermitteln, indem du ein count(*) in die Abfrage mit einbaust.
Hast du die Abfrage schonmal direkt auf der Datenbank für den letzten Eintrag ausprobiert? |
AW: ADO Connection Timeout
Hi,
er läuft auch auf Fehler, wenn er Records hat. Ich habe die Abfrage manuell gemacht und er liefert auch einen Wert zurück. |
AW: ADO Connection Timeout
Dashier geht unter SQL normalerweise nicht:
SQL-Code:
Status = NULL
In allen mir bekannten SQL-Varianten heißt das
SQL-Code:
.
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:
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.
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; |
AW: ADO Connection Timeout
danke für dein Feedback. Interessanterweise funktioniert es mit der FireDAC Query problemlos... - das werde ich jetzt so abändern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz