QSqlDatabase - Verbindungsabbruch bemerken

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

QSqlDatabase - Verbindungsabbruch bemerken

Beitrag von Tilman Räger »

Hallo,

mal wieder ein kleines Problem in Verbindung mit Datenbanken.
Wenn ich eine (MySQL-)Datenbank öffne und für mehrere Queries offen lasse, bekomme ich einen Fehler, wenn zwischen 2 Queries der Datenbank-Server neu gestartet wird (oder die Verbindung zum DB-Server wg Netzproblemen (Kabel gezogen :-) ) unterbrochen wurde. Allerdings sagt mir das Datenbank-Objekt nach wie vor, die Datenbankverbindung wäre offen. Gibt es (außer einer SQL-Query) eine Funktion, um zu überprüfen ob die Verbindung noch korrekt steht? isValid() und isOpen() geben beide true zurück. Ich frage diese beiden Funktionen generell vor der Ausführung einer Query ab. Oder macht es Sinn, die Funktion open() generell erst einmal aufzurufen?

Gruss
Tilman Räger
Markus
Beiträge: 105
Registriert: 31. Januar 2005 16:21

Re: QSqlDatabase - Verbindungsabbruch bemerken

Beitrag von Markus »

Hallo!

Ich vermute, dass isOpen() und isValid() bei MySQL einen Bug enthalten, dass sie immer true zurückliefern. Ich habe mir den "Workaround" geschaffen, dass wenn das Execute des SQL-Statements fehlschlägt, die Datenbankverbindung abzubauen und danach direkt wieder aufzubauen. Ist nicht schön, aber so bekomme ich mit, ob der MySQL-Server nicht mehr erreichbar ist oder die Verbindung wird erfolgreich aufgebaut und das Statement erneut zum Server geschickt. Ich gehe dabei davon aus, dass meine SQL-Statements syntaktisch korrekt sind, da der Anwender keinen Einfluss auf den Aufbau der Statements hat. Falls es beim Reconnect, der unsichtbar für den Anwender läuft, einen Verbindungsfehler gibt, gebe ich eine entsprechende Meldung aus.

Wer eine bessere Lösung hat, ich bin auch daran interessiert. ;-)

Viele Grüße,
Markus
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Re: QSqlDatabase - Verbindungsabbruch bemerken

Beitrag von Tilman Räger »

Hallo,
Markus hat geschrieben:Hallo!

Ich vermute, dass isOpen() und isValid() bei MySQL einen Bug enthalten, dass sie immer true zurückliefern. Ich habe mir den "Workaround" geschaffen, dass wenn das Execute des SQL-Statements fehlschlägt, die Datenbankverbindung abzubauen und danach direkt wieder aufzubauen. Ist nicht schön, aber so bekomme ich mit, ob der MySQL-Server nicht mehr erreichbar ist oder die Verbindung wird erfolgreich aufgebaut und das Statement erneut zum Server geschickt. Ich gehe dabei davon aus, dass meine SQL-Statements syntaktisch korrekt sind, da der Anwender keinen Einfluss auf den Aufbau der Statements hat. Falls es beim Reconnect, der unsichtbar für den Anwender läuft, einen Verbindungsfehler gibt, gebe ich eine entsprechende Meldung aus.

Wer eine bessere Lösung hat, ich bin auch daran interessiert. ;-)

Viele Grüße,
Markus
So habe ich es nun ebenfalls gelöst. Schliesse mich aber dem Interesse nach einer besseren Lösung an :-) - daher setze ich den Thread NICHT auf gelöst.

Gruss
Tilman
Antworten