Seite 1 von 1
QSqlDatabase - Verbindungsabbruch bemerken
Verfasst: 17. Januar 2013 18:52
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
Re: QSqlDatabase - Verbindungsabbruch bemerken
Verfasst: 21. Januar 2013 10:05
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
Re: QSqlDatabase - Verbindungsabbruch bemerken
Verfasst: 24. Januar 2013 16:50
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