AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADOQuery: Timeout abgelaufen beim Insert???
Thema durchsuchen
Ansicht
Themen-Optionen

TADOQuery: Timeout abgelaufen beim Insert???

Ein Thema von romber · begonnen am 27. Feb 2010 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 20:46
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 22:42
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#13

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 1. Mär 2010, 20:31
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?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 2. Mär 2010, 07:23
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#15

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 2. Mär 2010, 13:48
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#16

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 2. Mär 2010, 17:22
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});
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 2. Mär 2010, 17:28
Ich hoffe, du verfolgst diesen Thread parallel auch mit.

Da ist auch ein Beispiel für Prepared
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#18

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 2. Mär 2010, 17:51
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 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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:11 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