AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Connection Timeout

Ein Thema von fabi17 · begonnen am 4. Okt 2021 · letzter Beitrag vom 4. Okt 2021
Antwort Antwort
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

ADO Connection Timeout

  Alt 4. Okt 2021, 11:42
Datenbank: MSSQL • Version: 14 • Zugriff über: ADO
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:
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;
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.

Danke vorab für jede Hilfe

Viele Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ADO Connection Timeout

  Alt 4. Okt 2021, 12:00
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?
Peter
  Mit Zitat antworten Zitat
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: ADO Connection Timeout

  Alt 4. Okt 2021, 12:07
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 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
fabi17

Registriert seit: 1. Mai 2017
44 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: ADO Connection Timeout

  Alt 4. Okt 2021, 14:11
danke für dein Feedback. Interessanterweise funktioniert es mit der FireDAC Query problemlos... - das werde ich jetzt so abändern.

Geändert von fabi17 ( 4. Okt 2021 um 20:30 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz