Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Select während der Ausführung wieder abbrechen (https://www.delphipraxis.net/147622-sql-select-waehrend-der-ausfuehrung-wieder-abbrechen.html)

daddy 12. Feb 2010 21:26

Re: SQL-Select während der Ausführung wieder abbrechen
 
:-D Hab zwar keine Antwort auf meine ursprüngliche Frage erhalten, aber dank Eurer Hinweise dennoch eine Lösung für mein Problem gefunden. Ich trage jetzt beim ClientDataSet in der Eigenschaft "PacketRecords" einen Wert abweichend vom Default -1 ein (z.B. 500). Dann wird das ClientDataSet.Open ausgeführt, holt sich aber erst einmal nur 500 Datensätze. Anschließend läuft mein Programmcode weiter und Rave wird aufgerufen. Rave holt sich dann nach und nach die weiteren Datenpakete. Da ich aber für Rave ohnehin schon eine Aussprungsmöglichkeit während des Aufbaus der Seiten vorgesehen hatte, hat der Anwender nun die Möglichkeit die Datenermittlung und Druckausgabe rechtzeitig zu verhindern. Mit den 1 bis 2 Sekunden, während derer das nicht möglich ist, kann ich (und sicher auch der Anwender) leben.
Falls aber noch jemand eine Antwort auf meine in #10 gestellte Frage weiss, wäre ich daran weiterhin interessiert.

Ansonsten vielen Dank!
:cheers:

Daddy

daddy 12. Feb 2010 21:57

Re: SQL-Select während der Ausführung wieder abbrechen
 
:wall: Hmmm! Meine Begeisterung war vielleicht etwas voreilig.

Es kann ja auch vorkommen, dass ein Rave Report einfach nur das Ergebnis einer Aufsummierung anzeigen soll. Um also den Einwand aus #3 zu entkräften, kann man ja einfach mal annehmen, dass eine Million Datensätze, die dann vielleicht noch über zwei left joins mit anderen Tabellen verknüpft sind, gelesen und addiert werden müssen. Und das Ergebnis wird anschließend in der Druckvorschau angezeigt oder direkt auf dem Drucker ausgegeben. Das wird ja auch auf einem schnellen System schon mal 10 oder deutlich mehr Sekunden dauern können. In meinem Programm lässt sich z.B. eine Fünf-Jahres-Entwicklung der Umsatzzahlen abfragen und da können schon eine ganze Menge Daten anfallen. Dann wäre es natürlich doch von Vorteil eine Antwort auf #1 oder #10 zu bekommen, um solch ein Select wieder anzuhalten.

Hat also vielleicht doch jemand eine Idee? :gruebel:

sx2008 12. Feb 2010 23:29

Re: SQL-Select während der Ausführung wieder abbrechen
 
Zitat:

Zitat von daddy
Hat also vielleicht doch jemand eine Idee? :gruebel:

Du müsstest dir die fbclient.dll direkt vornehmen.
Mit dem Dependency Walker lässt du dir die Funktionen anzeigen.
Über eine Suchmaschine nach den Funktionsnamen suchen und die Deklarationen als *.pas oder *.h auftreiben.

Ich weiss nicht, ob ich auf dem falschen Dampfer bin, weil ich hier keine fbclient.dll vorliegen habe,
aber es gibt anscheinend eine Funktion:
Delphi-Quellcode:
function isc_dsql_finish(db_handle : PISC_DB_HANDLE): ISC_STATUS;stdcall; external IBASE_DLL;
Die Vermutung liegt nahe dass man isc_dsql_finish() vielleicht schon aufrufen kann, wenn die Query noch gar nicht fertig ist.

Also untersuchst du erst mal, wo isc_dsql_finish() in der Zeos-Lib aufgerufen wird.
Vielleicht ist ein vorzeitiger Abbruch schon vorgesehen oder man kann es durch eine kleine Erweiterung nachrüsten.
u.s.w. eben Reverse Engineering

hoika 13. Feb 2010 06:39

Re: SQL-Select während der Ausführung wieder abbrechen
 
Hallo,

um noch mal zum Thema zu kommen ...

Ab FB2.1 (oder schon 2.0 ?) besteht die Möglichkeit,
eine laufende Query zu beenden,
und zwar über die Monitoring Tables.

Release Notes

Suche dort nach Cancel a Running Query

Das das in einem anderen Thread passieren muss, sollte klar sein.


Heiko


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz