Seite 1 von 1

[gelöst]Datenbank-Wechsel ODBC->ODBC

Verfasst: 15. April 2013 22:13
von Tilman Räger
Hallo,

Mein Programm verwaltet Links zu verschiedenen Datenbanken die von aussen über eine standardisierte Schnittstelle abgefragt werden können. Jedem dieser Links ist eine Datenbank fest zugewiesen. Ein Problem tritt nun auf, wenn man bei einem mit einer ODBC-Datenbank verbundenen Link die DNS wechselt (Windows). Hierbei kommt es in Einzelfällen (speziell wenn eine der DNS über ODBC auf eine MySQL-Datenbank zugreift) dazu, das zwar Vollzug gemeldet wird, die Datenbank aber nicht gewechselt wird. Kennt jemand ein solches Problem?

Der Wechsel der Datenbank-verbindung erfolgt folgendermassen:

Code: Alles auswählen

QSqlDatabase Db;
const QString Id;   // Eindeutige Id des Links (bleibt also für dieses Problem konstant)
QString DSN1, DSN2;         // Über ODBCAdmin definierter DSN-Name

Db = QSqlDatabase::addDatabase(<Driver>, Id);
Db.setDatabaseName(DSN1);
Db.open();
...


Db.close();
QSqlDatabase::removeDatabase(Id);
// Dieser Wechsel von einer DSN auf eine andere (beide ODBC) funktioniert manchmal nicht!
QSqlDatabase::addDatabase(<Driver>, Id);

Db.close();
QSqlDatabase::removeDatabase(Id);
Db.setDatabaseName(DSN2)

Darüber hinaus bekomme ich beim close der Datenbank (treiberunabhängig, die Fehlermeldung

QSqlDatabasePrivate::removeDatabase: connection 'S4A514B73F5' is still in use, all queries will cease to work.

Queries sind definitiv nicht mehr am laufen (die werden alle nach dem Abarbeiten wieder in der selben Funktion gelöscht, in der sie (als lokale Variable) erstellt wurden.


Für Tips wie immer sehr dankbar.

Gruss
Tilman (Räger)

Hallo, das ganze scheint sich nun doch auf einen Fehler meinerseits herauszukristallisieren. Bei der Erkennung, ob sich die Datenbank geändert hat, war ein Fehler drin, der dazu führte, das in Einzelfällen mit der alten Definition weitergearbeitet wurde.

Tilman (Räger)