SQL-Abfrage über ODBC-Treiber abbrechen
-
Hallo,
ich habe folgendes Problem:
Meine Applikation benutzt die Borland-Komponenten TQuery und TDatabase und führt auf eine Remote-Datenbank eine SQL-Abfrage per ODBC-Treiber durch. Diese Abfrage ist jedoch sehr umfangreich und kann bis zu 30 Minuten dauern. Da der ODBC-Treiber die Steuerung der Abfrage komplett übernimmt, habe ich keine Möglichkeit, die Abfrage abzubrechen.
Gibt es einen Weg, um dem ODBC-Treiber mitzuteilen, dass die laufende Abfrage abgebrochen werden soll ?
Danke
Rico
-
Nicht das ich wüßte. Die ODBC-Schnittstelle ist auch das kleinere Problem, ich sehe das Problem eher beim Server. Selbst wenn Du das Programm terminierst, läuft der Select auf dem Server bis zum bitteren Ende... und verbrät dabei unnötig Leistung.
Was für eine DB wird eingesetzt? Möglicherweise muss nur die SQL-Abfrage ein bißchen optimiert werden.
Alternativ kannst Du den aufwändigeren Weg gehen und die benötigten Daten aus den Tabellen lokal zwischenspeichern und dort erst auswerten. Das ist im Regelfall die Option mit der höchsten Ausführungsgewschwindigkeit und der geringsten Serverbelastung. Leider auch die mit dem größten Programmieraufwand.
Grüße Joe_M.
-
-
@_Meier: Ich wüßte nicht, wie der Link hier helfen sollte... Oder bin ich so früh am Morgen einfach noch zu unterbelichtet??
-
Joe_M. schrieb:
@_Meier: Ich wüßte nicht, wie der Link hier helfen sollte... Oder bin ich so früh am Morgen einfach noch zu unterbelichtet??
Schon möglich.
Ansonsten schau dir den Link nochmal an.
-
@_Meier: ok, dann etwas deutlicher: Das ist ein Befehl von Microsoft Visual FoxPro. Gehört nicht zum Standard. Ausserdem ist es eine Anweisung zur Verwendung innerhalb von SQL-Anweisungen. Keine der mit bekannten Datenbankzugriffskomponenten bietet eine Abbruchmöglichkeit...
-
Nimm das.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlcancel.asp
-
Und dann nochmal nach SQL Pass-Through googeln.
-
uiuiui... Das läuft dann aber darauf hinaus, dass man das alles per API-Aufruf machen muss, respektive mit ADO ist das vielleicht über das Delphi-Interface (COM-Objekt) möglich.
OK, theoretisch haben wir also eine Möglichkeit, aber unter Verwendung von TDatabase / TQuery will mir keine Möglichkeit zur Implementierung einfallen.
-
Joe_M. schrieb:
... aber unter Verwendung von TDatabase / TQuery will mir keine Möglichkeit zur Implementierung einfallen.
Nee, aber ich würde mir mal die Abfrage anschauen ... eventuell liegt da das Problem ... oder das Datenbankmodell sollte mal überarbeitet werden.
30 Minuten sind etwas heftig.
-
und damit sind wir wieder bei meinem ersten Posting dazu...

-
Naja Querys von einer Halben stunde sind zwar sehr viel, könnten aber rein theoretisch vorkommen, auch, wenn ich nciht wüsste wie...
Wahrscheinlich einfach viele Datensätze...
Schonmal an ein Limit gedacht?