Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TADOQuery: Timeout abgelaufen beim Insert??? (https://www.delphipraxis.net/148308-tadoquery-timeout-abgelaufen-beim-insert.html)

Bernhard Geyer 27. Feb 2010 20:46

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Zitat:

Zitat von romber
Liegt mein Problem vielleicht daran, dass ich es mir einfach gemacht habe und die Daten mit ADOQuery.Insert -> ADOQuery.FieldByName().Value -> ADOQuery.Post hinzufüge? Ist ein generiertes SQL-Statement die Lösung?

Schau doch mal im Profiler was beim Server ankommt.

alzaimar 27. Feb 2010 22:42

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Zitat:

Zitat von romber
Liegt mein Problem vielleicht daran, dass ich es mir einfach gemacht habe und die Daten mit ADOQuery.Insert -> ADOQuery.FieldByName().Value -> ADOQuery.Post hinzufüge? Ist ein generiertes SQL-Statement die Lösung?

Sagen wir: Eine Möglichkeit.*** Wie sieht denn dein ADOQuery.SQL.Text aus...?

*** Ich habe mir mittlerweile für alle SQL-Datentypen eigene Formatierungsroutinen geschrieben, die nicht länderspezifisch sind.

romber 1. Mär 2010 20:31

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Unser Admin meint, der SQL Server funktioniert perfekt. Im Profiler alle Werte im grünen Bereich. Ich werde mein Code überarbeiten und werde dann schauen.
Wie erstelle ich ein Prepared Statement?

alzaimar 2. Mär 2010 07:23

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Das 'prepared Statement' ist nicht die Lösung, denn das erspart nur die Kompilierungszeit auf SQL-Server Seite im Falle einer mehrfachen Verwendung des Befehls. Hier würde man den Durchsatz im Hochgeschwindigkeitsbereich verbessern können.

Bei dir wäre das der 2.Schritt. Sorg erstmal dafür, das die Performance akzeptabel ist/wird.

Wie sieht dein ADOQuery.SQL.Text aus?

Wenn Du z.B. dort zu stehen hast 'SELECT * FROM Tabelle' und wird bei 'ADOQuery.Active := True' natürlich erstmal die ganze Tabelle geladen.
Abhilfe: Schreib 'SELECT * FROM Tabelle WHERE 1=0' da rein und schon wäre die erste Hürde genommen.

romber 2. Mär 2010 13:48

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Zitat:

Zitat von alzaimar
Wie sieht dein ADOQuery.SQL.Text aus?

Die SQL.Text enthält eine Abfrage, die keine Ergebnisse liefern kann, ähnlich wie alzaimar es gepostet hat. Die ganze Tabelle wird nicht aslo geladen. Ich möchte nun die Code überarbeiten und Prepared Statements einsetzen.

shmia 2. Mär 2010 17:22

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Die Default Timeoutzeit bei einer ADO-Query beträgt 30s.
Das lässt sich aber ändern:

Delphi-Quellcode:
type
   TCustomADODataSetCracker = class(TCustomADODataSet);
procedure ADODataSet_SetCommandTimeout(ds: TCustomADODataSet; const ATimeout: Integer);
begin
   TCustomADODataSetCracker(ds).CommandTimeout := ATimeout;
end;
...
// Timeoutzeit erhöhen
ADODataSet_SetCommandTimeout(ADOQuery1, 3 * 60 {=3 Minuten});

Sir Rufo 2. Mär 2010 17:28

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Ich hoffe, du verfolgst diesen Thread parallel auch mit.

Da ist auch ein Beispiel für Prepared

romber 2. Mär 2010 17:51

Re: TADOQuery: Timeout abgelaufen beim Insert???
 
Zitat:

Zitat von shmia
Die Default Timeoutzeit bei einer ADO-Query beträgt 30s.
Das lässt sich aber ändern

Vielen Dank für diesen Hinweis! Das mag für bestimmte Fälle sehr hilfreich sein, doch in meinem Fall soll der Timeout eingentlich gar nicht passieren. Ein paar Hundert Inserts innerhalb´einer Minute sollte kein Problem sein.

Zitat:

Zitat von Sir Rufo
Ich hoffe, du verfolgst diesen Thread parallel auch mit. Da ist auch ein Beispiel für Prepared

Habe ich noch nicht gelesen, vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Seite 2 von 2     12   

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