AGB  ·  Datenschutz  ·  Impressum  







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

FireDac Asynchron Abort

Ein Thema von Edelfix · begonnen am 10. Mai 2023 · letzter Beitrag vom 15. Jun 2023
Antwort Antwort
Seite 1 von 2  1 2      
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#1

FireDac Asynchron Abort

  Alt 10. Mai 2023, 10:42
Datenbank: ADS • Version: 12 • Zugriff über: FireDac
Hallo,

versuche gerade folgendes Beispiel: https://docwiki.embarcadero.com/RADS...rung_(FireDAC)

Jetzt möchte ich so einen asynchronen Aufruf vorzeitig abbrechen.

Mit FDQuery1.Close; gelingt mir das leider nicht.

Die Query wechselt in FDQuery1.Command.State = csPrepared

Wie komme ich wieder in den FDQuery1.Command.State = csInactive?

Der einzige Weg denn ich bis jetzt finden konnte ist FDQuery1.Connection.Close; Aber es muss einen anderen Weg geben.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 10:45
Hast du denn schon AbortJob probiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 10:48
Oh. Hätte ich erwähnen sollen. Ja habe ich versucht. Leider auch ohne Erfolg. Es bleibt bei csPrepared
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 11:33
Welchen Zustand würdest du denn erwarten?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 11:37
In der Regel kannst du von csPrepare durch den Aufruf Unprepare auf csInactive wechseln. Die Frage ist, warum du das Prepare später nochmal durchführen willst, wenn es doch schon erfolgreich war.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 14:29
Wenn eine Abfrage noch läuft und ich dann wieder in die Procedure gehe dann bekomme ich an folgender Stelle eine Exception:

Delphi-Quellcode:
FDQuery1.Close;
FDQuery1.SQL.Text := 'SELECT * FROM Table1'; // hier eine Exception wenn FDQuery1.Command.State = csPrepared
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 15:06
Auch bei AbortJob(True)? Es kann ja sein, dass der Abbruch intern etwas dauert.

Das Prepared ist aber auch so dokumentiert:
Zitat:
Die Methode AbortJob bricht eine der folgenden Datenmengenoperationen ab:
  • Open. Die Datenmenge führt eine DBMS-Anweisung zum Öffnen eines Cursors aus.
  • ExecSQL/Execute. Die Datenmenge führt eine DBMS-Anweisung aus.
  • Fetch. Die Datenmenge ruft Zeilen vom Cursor ab.
Nach einem Aufruf von AbortJob ist der Status Active der Datenmenge False und Prepared ist für Open/ExecSQL/Execute True. Der Status Active ist für Fetch True.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: FireDac Asynchron Abort

  Alt 10. Mai 2023, 15:16
Habe es jetzt so gelöst:

Delphi-Quellcode:
  FDQuery1.Close;
  if (FDQuery1.Command.State = csPrepared) then
    FDQuery1.Unprepare;
  if (FDQuery1.Command.State <> csInactive) then
  begin
    FDQuery1.Connection.AbortJob(true);
    FDQuery1.Connection.Close;
  end;
Scheint erst ein mal zu gehen. Danke.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: FireDac Asynchron Abort

  Alt 14. Jun 2023, 15:18
So richtig funktioniert es immer noch nicht.

Ich komme einfach nicht zu csInactiv.

Mit FDQuery1.Connection.AbortJob(true); komme ich von csExecuting zu csOpen.

Mit FDQuery1.Connection.Close; kommt die Exception: [FireDAC][Comp][Clnt]-326. Ausführen der Aktion nicht möglich, weil die vorherige Aktion noch nicht abgeschlossen ist

Wenn ich diese mit try except einklammere dann habe ich danach den Status csOpen und nicht wie gewünscht csInactiv.

Die Connection lässt sich nicht schließen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: FireDac Asynchron Abort

  Alt 14. Jun 2023, 15:42
Gemäß Beschreibung sollte das aber eigentlich funktionieren.

Kannst du das mit einem Beispielprojekt reproduzieren? Dann würde ich das mal mit der aktuellen Delphi Version probieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:44 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