Announcement

Collapse
No announcement yet.

CommandTimeout scheint nicht zu funktionieren.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CommandTimeout scheint nicht zu funktionieren.

    Ich habe auch schon über die Suche nach Timeout gesucht und in fast allen Themen wurde vorgeschlagen CommandTimeout zu benutzen um den Timeout Wert zu setzen, aber ich habe es getestet und es scheint nicht zu funktionieren.

    Ich habe Folgendes gemacht:

    Zunächst schreibe ich einen Query, der nur aus einer Dauerschleife besteht.

    Dann bereite ich den Query vor usw., setze das CommandTimeout auf "1" und habe dann folgenden Code:

    Code:
    //Start transaction
    ADOConnection1->BeginTrans();
    Label1->Caption = ADOConnection1->CommandTimeout;
    ADOQuery1->Prepared = true;
    ADOQuery1->Open();
    Das Label zeigt "1" an, der Wert scheint also richtig gesetzt worden zu sein, aber ich habe 20 Sekunden gewartet und die Dauerschleife wurde immernoch nicht abgebrochen, dabei sollte sie theoretisch ja nach einer Sekunde abgebrochen werden.

    Habe ich etwas übersehen?

  • #2
    CommandTimeout gibt den Zeitraum (in Sekunden) an, nach dessen Ablauf der Versuch abgebrochen wird, einen Befehl auszuführen. Kann der von der Methode Execute aufgerufene Befehl nicht vor dem Ablauf des für CommandTimeout angegebenen Zeitraums erfolgreich ausgeführt werden, wird der Befehl verworfen, und ADO generiert eine Exception:
    Könnte das die Ursache sein?

    Open stellt nur die Verbindung her...

    Execute fürht einen Befehl aus, der in Command drin steht. Und deinen Query sehe ich nicht....

    Des Weiteren ist m.E. deine Reihenfolge falsch

    Erst Open
    Dann BeginTrans

    Letzteres kann nur mit einer bestehenden Verbindung genutzt werden...

    Welche Verbindung nutzt die Query?? Dann wäre auch der Timeout an der Query zu setzen und nicht an der Connection.

    Beide Klassen können Abfragen setzen. Erstere über Command und Execute. Die Query über Command und ExecSQL. Der Timeout wäre an der entsprechende Klasse zu setzen, die nu arbeitet
    Zuletzt editiert von Christian Marquardt; 30.01.2008, 18:20.
    Christian

    Comment


    • #3
      Nein, sorry, aber das macht nun wirklich keinen Sinn.

      Es gibt gar keine Execute Methode, weiß gar nicht, woher du das Zitat hast. Open von TADOQuery führt das gesamte SQL Statement aus, daher muss die Transaktion auch davor beginnen ansonsten würde ein Rollback nicht funktionieren.

      Die ADOQuery1 benutzt logischerweise die ADOConnection1.


      Aber trotzdem danke, mir ist gerade das Problem aufgefallen. Man muss das Timeout bei ADOQuery1 setzen und nicht bei ADOConnection1, ich dachte es wird automatisch für die untergeordneten Objekte übernommen aber das scheint nicht der Fall zu sein. Es funktioniert jetzt. =)

      Comment


      • #4
        Nein, sorry, aber das macht nun wirklich keinen Sinn.
        Dann offenbar nur in deiner Version

        Aber trotzdem danke, mir ist gerade das Problem aufgefallen. Man muss das Timeout bei ADOQuery1 setzen
        Genau das habe ich geschrieben
        Christian

        Comment


        • #5
          Sind die Versionen so unterschiedlich, dass sie da mal schnell ein Open in ein Execute umbenennen? o.o


          Habe dann noch eine Frage, wie heißt die Exception die geworfen wird, wenn ein Timeout entsteht? Der Name steht irgendwie nicht in der Hilfe.
          Zuletzt editiert von Rya; 31.01.2008, 13:28.

          Comment


          • #6


            Nein, sorry, aber das macht nun wirklich keinen Sinn.
            Für dich mag das keinen Sinn ergeben, dennoch ist die Methode existent. Des Weiteren die entsprechende Hilfe zu dem Timeout, aus der ich zitierte.

            Und auf die Gefahr der Wiederholung hin:

            dass sie da mal schnell ein Open in ein Execute umbenennen?

            Ein Open hat mit Execute nichts zu tun.



            Beide Klassen können Abfragen setzen. Erstere über Command und Execute. Die Query über Command und ExecSQL. Der Timeout wäre an der entsprechende Klasse zu setzen, die nu arbeitet
            Zuletzt editiert von Christian Marquardt; 01.03.2009, 11:03.
            Christian

            Comment

            Working...
            X