Datenbank-Zugriff in QDialog
Verfasst: 16. Januar 2020 22:56
Hallo,
ich habe eine Applikation mit einer Reihe von Masken, die teilweise zugehörige Dialoge haben. D.h. ich stelle in einer Maske z.B. Daten dar, die ich aus einer Datenbank lese. Wenn ich einen neuen Datensatz erstellen, einen bestehenden Datensatz ändern oder einen Datensatz löschen will, dann habe ich dazu jeweils einen Dialog geschrieben, der die nötigen Aktionen durchführt.
Die Daten liegen in einer MYSQL-Datenbank.
Ich habe eine einzige QSQLDatabase-Instanz (in QApplication). Dort wird auch die Datenbank geöffnet. Alle (ca. 35) Masken verwenden einfach QSqlQuery, um auf die anzuzeigenden Daten zuzugreifen. Das Ganze funktioniert (auch jetzt noch) einwandfrei.
Zur Datenmodifikation verwende ich jeweils QDialog. In diesen wird im Konstruktor grundsätzlich Konfigurationsparameter (ebenfalls per QSqlQuery) aus der Datenbank gelesen und auch das funktioniert einwandfrei. D.h. der Konstruktor eines Dialogs kann ebenfalls auf die Datenbank zugreifen und Daten daraus lesen. Eine Dialog ist jeweils Child der zugehörigen Maske.
In jedem Dialog habe ich eine Routine, über die ich dem Dialog mitteilen kann, welchen Datensatz ich verändern und was (Neu, Mod, Del) ich mit dem Datensatz machen will. Das funktionierte bis vor kurzem auch einwandfrei.
Seit einigen Tagen (genauer kann ich es leider nicht eingrenzen) haben alle Dialoge zwar Zugang zur Datenbank im Konstruktor, aber nicht mehr in der Routine, über die ich mitteile, was ich an welchem Datensatz verändern will.
Ich erhalte jetzt Fehler "QSqlQuery::prepare: database not open" bzw. "QSqlQuery::exec: database not open" und keiner der Dialoge funktioniert mehr. Dies unabhängig davon, ob ich den Dialog mit exec oder mit open starte.
Ich verwende Leap 15.1 als Betriebssystem und Qt5.9.7 als Qt-Version. Als Datenbank benutze ich 10.2.29-MariaDB.
Die Datenbank läßt 151 Connections zu und ich benutze ca. 40. Probehalber habe ich die maximale Zahl der Connections auf 250 hochgesetzt, ohne daß sich am beschriebenen Verhalten was geändert hätte.
Frage: Was könnte die Ursache sein?
ich habe eine Applikation mit einer Reihe von Masken, die teilweise zugehörige Dialoge haben. D.h. ich stelle in einer Maske z.B. Daten dar, die ich aus einer Datenbank lese. Wenn ich einen neuen Datensatz erstellen, einen bestehenden Datensatz ändern oder einen Datensatz löschen will, dann habe ich dazu jeweils einen Dialog geschrieben, der die nötigen Aktionen durchführt.
Die Daten liegen in einer MYSQL-Datenbank.
Ich habe eine einzige QSQLDatabase-Instanz (in QApplication). Dort wird auch die Datenbank geöffnet. Alle (ca. 35) Masken verwenden einfach QSqlQuery, um auf die anzuzeigenden Daten zuzugreifen. Das Ganze funktioniert (auch jetzt noch) einwandfrei.
Zur Datenmodifikation verwende ich jeweils QDialog. In diesen wird im Konstruktor grundsätzlich Konfigurationsparameter (ebenfalls per QSqlQuery) aus der Datenbank gelesen und auch das funktioniert einwandfrei. D.h. der Konstruktor eines Dialogs kann ebenfalls auf die Datenbank zugreifen und Daten daraus lesen. Eine Dialog ist jeweils Child der zugehörigen Maske.
In jedem Dialog habe ich eine Routine, über die ich dem Dialog mitteilen kann, welchen Datensatz ich verändern und was (Neu, Mod, Del) ich mit dem Datensatz machen will. Das funktionierte bis vor kurzem auch einwandfrei.
Seit einigen Tagen (genauer kann ich es leider nicht eingrenzen) haben alle Dialoge zwar Zugang zur Datenbank im Konstruktor, aber nicht mehr in der Routine, über die ich mitteile, was ich an welchem Datensatz verändern will.
Ich erhalte jetzt Fehler "QSqlQuery::prepare: database not open" bzw. "QSqlQuery::exec: database not open" und keiner der Dialoge funktioniert mehr. Dies unabhängig davon, ob ich den Dialog mit exec oder mit open starte.
Ich verwende Leap 15.1 als Betriebssystem und Qt5.9.7 als Qt-Version. Als Datenbank benutze ich 10.2.29-MariaDB.
Die Datenbank läßt 151 Connections zu und ich benutze ca. 40. Probehalber habe ich die maximale Zahl der Connections auf 250 hochgesetzt, ohne daß sich am beschriebenen Verhalten was geändert hätte.
Frage: Was könnte die Ursache sein?