Seite 1 von 1

Fortschrittsanzeige bei SQL-Abfrage

Verfasst: 11. September 2008 14:29
von chrislo1976
Hallo!

Ein Programm an dem wir arbeiten führt zum Teil recht umfangreiche Datenbankabfragen durch, teilweise ist die Verbindung sogar übers Internet. Deshalb kann so eine Abfrage schon mal dauern.
Momentan ist es so dass während dieser Zeit die Sanduhr angezeigt wird und solange nix geht bis die Abfrage abgeschlossen ist.

Dies ist nicht sonderlich schön, manchmal weiß man gar nicht ob das Programm abgestürzt ist oder nicht...

Gibt es mit Qt-Mitteln (sprich mit den Qt-SQL-Klassen) eine Möglichkeit während die Abfrage läuft, zyklisch einen Status dazu zu bekommen?! Ich würde gern eine Art Fortschrittsdialog anzeigen lassen, sodaß ich sehe:
1.) es geht noch was,
2.) wieviele Datensätze wurden schon geladen und
3.) wieviele Datensätze kommen noch.

Ein zusätztliches Feature wäre dann noch die Abfrage abzubrechen.

Weiß jemand ob sowas realisierbar ist? Unter Win32-SDK bzw. MFC kenn ich Callbacks (z.B. bei Dateioperationen) mit denen man sowas bewerkstelligen kann.

Wäre für jede Art Info, Tipps und Hilfe dankbar!

Gruß,
Christian

Verfasst: 11. September 2008 14:31
von Christian81
Die SQL-Opertationen in einen eigenen Thread auslagern ist da wohl das Mittel der Wahl.

Verfasst: 11. September 2008 15:05
von chrislo1976
Hallo!

Gut, damit würde die Applikation selbst nicht blockiert werden während die Abfrage läuft, aber Hauptziel wäre es für mich den aktuellen Status der Abfrage mitzubekommen...

Gruß,
Christian

Verfasst: 11. September 2008 15:09
von Christian81
Wenn Du eine DB-Abfrage weggeschickt hast wirst Du wohl mit den normalen Qt-Treiber keine Chance haben irgendwelche Statusinformationen über den Ablauf zu bekommen. Das müsste der DB-Treiber erstmal unterstützen und das tun imho nur die wenigsten (wenn überhaupt).

Verfasst: 11. September 2008 15:10
von macman
Hab noch nirgendwo etwas in der Richtung gesehen. In so einem Fall lasse ich einen Timeout-Timer laufen und die ProgressBar bezieht sich dann auf den Timer. Dann weiß man wenigstens wann es spätestens weiter geht :-)