Während der Laufzeit die SQLite DB wechseln
Verfasst: 12. Februar 2009 11:27
Hi,
ich arbeite an einem Programm mit zwei Model/View-Komponenten die auf eine SQLite Datenbank zugreifen.
Ich möchte nun während der Laufzeit die Datenbank wechseln. Das ganze klappt auch, nur wird die "alte" SQLite Datenbank nicht geschlossen.
Hier ist der Code der die Datenbank öffnet:
Wie man dort schon sieht möchte ich auch die aktuelle Datenbank überschreiben können.
Ich dachte es würde reichen wenn ich die aktuelle DB schließe, die Datei lösche und neu öffne, aber das ganze klappt leider nicht.
removeDatabase erzeugt diese Warnung:
Die Dateihandles werden auch nicht geschlossen. (habe ich mit Unlocker überprüft)
Wenn ich die Model/View-Komponenten nicht erstelle klappt alles einwandfrei.
Mein Gedanke wäre gewesen, die Models vor dem schließen der Datenbank von den Views zu entbinden und mit delete zu löschen, aber sowas geht wohl nicht...
Wie kann ich dieses Problem lösen?
Danke schonmal,
Strayer
ich arbeite an einem Programm mit zwei Model/View-Komponenten die auf eine SQLite Datenbank zugreifen.
Ich möchte nun während der Laufzeit die Datenbank wechseln. Das ganze klappt auch, nur wird die "alte" SQLite Datenbank nicht geschlossen.
Hier ist der Code der die Datenbank öffnet:
Code: Alles auswählen
bool DataHandler::openDatabase(QString file, bool removeBeforeOpen)
{
// Ggfs. alte DB schließen
if (QSqlDatabase::contains(QSqlDatabase::defaultConnection))
{
QSqlDatabase::database().close();
QSqlDatabase::removeDatabase(QSqlDatabase::defaultConnection);
}
// Angegebene Datei löschen
if (removeBeforeOpen && QFile::exists(file))
qDebug() << QFile::remove(file);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(file);
if (!db.open())
{
QMessageBox::critical(0, QObject::tr("Datenbankfehler!"),
db.lastError().text());
return false;
}
createWeekEntriesMapping();
return true;
}Ich dachte es würde reichen wenn ich die aktuelle DB schließe, die Datei lösche und neu öffne, aber das ganze klappt leider nicht.
removeDatabase erzeugt diese Warnung:
Code: Alles auswählen
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.Wenn ich die Model/View-Komponenten nicht erstelle klappt alles einwandfrei.
Mein Gedanke wäre gewesen, die Models vor dem schließen der Datenbank von den Views zu entbinden und mit delete zu löschen, aber sowas geht wohl nicht...
Wie kann ich dieses Problem lösen?
Danke schonmal,
Strayer