Seite 1 von 1

QSqlDatabasePrivate mäckert beim Beenden

Verfasst: 26. August 2005 12:20
von BartSimpson
Hallo, wenn ich mein Programm beenden erhalte ich an der Konsole dies hier:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will
cease to work.

Aber in Destruktor meiner Klasse die die DB benutzt wird die Verbidnugn zur DB getrennt. Oder mach ich da was falsch?

Verfasst: 26. August 2005 13:34
von FlorianBecker
Du fügst eine 2. Standardverbindung hinzu.

Verfasst: 26. August 2005 13:48
von BartSimpson
ich füge nur eine einzige mit
Datenbank=QSqlDatabase::addDatabase("QSQLITE");
hinzu. Oder muss man das anders schreiben?

Verfasst: 26. August 2005 16:49
von FlorianBecker
Du überschreibst damit die default Verbindung. Setze einfach eine Default Verbindung, dann tritt dieser "Hinweis" nicht auf.

Außerdem es ist eine Notiz und die ist so ziemlich zu vernachlässigen.

Verfasst: 26. August 2005 17:03
von BartSimpson
Und wie gehst das?

Verfasst: 17. April 2007 23:31
von law.skynet
ich habe das selbe problem

ich öffne meine db via database.h

Code: Alles auswählen

...
static bool connectDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("foo.db");

    if (!db.open()) {
        QMessageBox::critical(0, qApp->tr("Cannot open database"),
            qApp->tr("Unable to establish a database connection.\n\n"
                     "Click Cancel to exit."), QMessageBox::Cancel);
        return false;
    }
    return true;
}
...
danach verbinde ich mich via main.cpp

Code: Alles auswählen

...
if (!connectDB())
        return 1;
...
und fragen danach daten via mainwindow.cpp ab

Code: Alles auswählen

...
tableModel = new QSqlTableModel;
    tableModel->setTable("foo");
    tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableModel->select();
    tableModel->setHeaderData(0, Qt::Horizontal, tr("Title (name)"));

    itemView->setModel(tableModel);
...
ich sehe die daten auch aber wenn ich das programm beende bekomme ich immer folgende meldung:

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


wie bekomme ich diese weg?
ich bin derzeit noch recht neu in qt4, ich arbeite mit derzeit durch diese

http://www.qt4-buch.de/ buch durch.

cu
law.skynet

Verfasst: 18. April 2007 08:10
von franzf
static void QSqlDatabase::removeDatabase( const QString & connectionName );
Wenn man beim Erzeugen der Datenbankverbindung einen eigenen Namen angibt ( "MyApp" ), ist es kein Problem, diese Verbindung auch wieder zu entfernen. Einfach removeDatabase in den Destruktur und es passt. (Sollte so aber auch mit der Default-connection klappen)

Wenn man natürlich sein DB-Objekt (oder das Objekt, welches auf der Datenbank operiert) als Zeiger verwaltet, darf man keinesfalls vergessen, dieses mit delete wieder zu zerstören. Ist mir so vor kurzem passiert ;)

Grüße
Franz

Verfasst: 18. April 2007 12:29
von law.skynet
danke für deine Antwort.

wenn ich aber einen connection namen vergebe bekomme ich immer folgende Fehlermeldung.

QSqlQuery::exec: database not open

muss ich bei der query zusätzlich noch irgendetwas angeben?

ich bin noch ein rechter qt4 neuling ;-)

Verfasst: 18. April 2007 13:08
von franzf
Grobes Vorgehens-Schema:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE", "MyApp" );
db.setDatabaseName( "/Path/To/MyApp.db" );
if( !db.open() )
    qDebug( "Couldn't open the database" );

QSqlQuery q( db );
q.exec( ... );
[...]
QSqlDatabase::removeDatabase( "MyApp" );
Grüße
Franz

Verfasst: 18. April 2007 15:08
von law.skynet
danke so ähnlich sieht jetzt meine Lösung aus :-)