[gelöst] QSqlTableModel verliert Datenbank Connection ... ?
Verfasst: 13. März 2012 08:24
Guten Tag,
ich erarbeite mir gerade ein eigenes Maskenframework in QT4.7 zur Programmierung größerer Datenbankprojekte.
Im großen und ganzen komme ich gut voran allerdings möchte ich die Datenbankverbindung mit einem eigenen Namen versehen und nicht immer mit der "qt_sql_default_connection" arbeiten. Immerhin könnte es mal sein, dass eine Maske mehrere Datenbankverbindungen benötigt.
Mein Problem:
Benutze ich einen eigenen Datenbanknamen geht die Datenbank Connection irgendwo im QSqlRealtionalTableModel verloren, so dass darin nicht mehr auf die Tabellen in der Datenbank zugegriffen werden kann.
Für den Code in dem der Fehler auftritt wird zunächst ein QDialog mit Widgets für Eingabe von Kennung und Passwort angezeigt und dann mit der Datenbank erfolgreich verbunden. Datenbank: Oracle, Treiber: in Qt mitgelieferter QOCI8 Treiber.
Setze ich beim
bekomme ich als Meldungen im Debug Fenster:
Setze ich "name" aber auf "MeineMaske", dann kommt als Meldung:
es geht also bei der Initialisierung von QSqlRelationalTableModel die Datenbank verloren.
Ich weiss, das ist ein bisschen wenig Code, aber könnte es sein, dass ich etwas grundsätzliches übersehen habe oder ist da irgendwo tief drinnen vielleicht eine "Funktionsabweichung" ?
Bei der Gelegenheit gleich noch eine kleine Wissensfrage:
Wie kann eine vorhandene Datenbank Connection an ein weiteres parallel gestartetes Qt Programm (z.B. via SharedMemory) weiter geben?
Viele Grüsse,
Volker
ich erarbeite mir gerade ein eigenes Maskenframework in QT4.7 zur Programmierung größerer Datenbankprojekte.
Im großen und ganzen komme ich gut voran allerdings möchte ich die Datenbankverbindung mit einem eigenen Namen versehen und nicht immer mit der "qt_sql_default_connection" arbeiten. Immerhin könnte es mal sein, dass eine Maske mehrere Datenbankverbindungen benötigt.
Mein Problem:
Benutze ich einen eigenen Datenbanknamen geht die Datenbank Connection irgendwo im QSqlRealtionalTableModel verloren, so dass darin nicht mehr auf die Tabellen in der Datenbank zugegriffen werden kann.
Für den Code in dem der Fehler auftritt wird zunächst ein QDialog mit Widgets für Eingabe von Kennung und Passwort angezeigt und dann mit der Datenbank erfolgreich verbunden. Datenbank: Oracle, Treiber: in Qt mitgelieferter QOCI8 Treiber.
Code: Alles auswählen
class MyQSqlTableModel : public QSqlRelationalTableModel
{
public:
explicit MyQSqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() )
{
m_specialColumnNo = -1;
qDebug() <<"MyQSqlTableModel, connection: "<<db.connectionName() <<" Offen? "<<db.isOpen() <<" Valid? "<<db.isValid();
::QSqlRelationalTableModel (parent, db);
qDebug() <<"verwendete connection: "<<database().connectionName() <<" Offen? "<<database().isOpen() <<" Valid? "<<database().isValid();
}
Code: Alles auswählen
.....
name = "qt_sql_default_connection";
.....
bool MyLogin::isDbOpen() {
MyDb::db = QSqlDatabase::addDatabase("QOCI8", name);
if (MyDb::db.isOpen())
return true;
return false;
}
Code: Alles auswählen
Datenbank offen ? true Name: ("qt_sql_default_connection")
MyQSqlTableModel, connection: "qt_sql_default_connection" Offen? true Valid? true
verwendete connection: "qt_sql_default_connection" Offen? true Valid? true
Code: Alles auswählen
Datenbank offen ? true Name: ("MeineMaske")
MyQSqlTableModel, connection: "MeineMaske" Offen? true Valid? true
verwendete connection: "" Offen? false Valid? false
Ich weiss, das ist ein bisschen wenig Code, aber könnte es sein, dass ich etwas grundsätzliches übersehen habe oder ist da irgendwo tief drinnen vielleicht eine "Funktionsabweichung" ?
Bei der Gelegenheit gleich noch eine kleine Wissensfrage:
Wie kann eine vorhandene Datenbank Connection an ein weiteres parallel gestartetes Qt Programm (z.B. via SharedMemory) weiter geben?
Viele Grüsse,
Volker