Asyncrone ADO Query - Ergebnisse anzeigen?
-
Hi
Ich benutze BCC++ 6. Der Sinn hinter der ganzen Aktion ist die Möglichkeit eine SQL Abfrage (per ADOQuery) während der Laufzeit abzubrechen. Zusätzlich soll wärend der Laufzeit noch die verstrichene Zeit angezeigt werden.
Dafür habe ich die Abfrage in einen eigenen Thread gelegt. Das ganze mache ich asyncron um (wenn ich das richtig verstanden habe) überhaupt die Möglichkeit zu haben die Abfrage abzubrechen. (Bitte korrigieren wenn falsch). Sobald die Abfrage asyncron ist kann ich aber nicht feststellen wann die Abfrage beendet ist. Dafür benutze ich die Funktion AfterOpen (die Abfrage beginne ich mit ADOQuery->Open()). Wenn ich also hier hin gelange sollte die Query geöffnet sein. Aber wenn ich in dieser Funktion (und in dem Thread) auf irgendetwas aus der Query zugreifen möchte (und sei es nur den Status auszulesen) bekomme ich eine EAccessViolation.
Wenn ich das nicht versuche scheint alles soweit gut zu laufen. Die Abfrage wird gestellt. Dauert 8 Sekunden. Wärenddessen wird mir auch sehr schön die Zeit angezeigt. Auch das Ende der Abfrage kann ich über die AfterOpen Methode anzeigen lassen. Ich kann aber an keiner Stelle auf die Daten zugreifen.
Zusammengefasst:
1. Wie kann ich eine leufende ADOQuery abbrechen?
2. Wie kann auf Daten aus der Query zugreifen?Mir scheint, dass ich hier generell falsch an die Sache heran gehe. Bitte gebt mir Tipps und Anregungen für mein Problem.
Vielen Dank
Mc
-
zu 2. schau mal hier
zu 1. verwende statt ADOQuery lieber ADOCommand und ADORecordSet und schau dir in der BCB-Hilfe die Einträge "Die Befehlsausführung abbrechen" und "Mit Befehlen Ergebnismengen abrufen" an. Diese beiden Seiten erreichst du über die Hilfe zu TADOCommand -> Link:"Verwendung von TADOCommand"
weitere Fragen zu VCL-Komponenten sind wahrscheinlich im VCL-Forum besser aufgehoben
-
Bedeutet Async beim ADO Recordset nicht, das er jeweils nur die gesetzte CacheSize fetched und den Rest dann "auf Anfrage" (sprich, wenn man weiterscrolled) holt?