Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ не срабатывает removeDatabase

Автор: maint 2.8.2015, 8:08

Qt5. Дополнительный коннект, со второй базой.
Код

QSqlDatabase cfgdb;

        cfgdb = QSqlDatabase::addDatabase("QSQLITE", "Rules");
        cfgdb.setDatabaseName(name);

        if (!cfgdb.open()) {
            return false;
        }
        QSqlQuery q(cfgdb);
        QString sql;

        sql = "SELECT " + rec.value("name").toString() + " FROM " + rec.value("pkey").toString();
        if (!q.exec(sql)) {
            return false;
        }
        if (!q.first()) {
           return false
        } else {
            QString a, b;
            a = rec.value("value").toString();
            b = q.value(0).toString();
            if (a == b)
                retcode = true;
            else
                retcode = false;
        }
        q.finish();
        q.clear();

        cfgdb.close();
        QSqlDatabase::removeDatabase("Rules");

В принципе все отрабатывает, но при вызове removeDatabase выдается диагностика
QSqlDatabasePrivate::removeDatabase: connection 'Rules' is still in use, all queries will cease to work.

Автор: FireBlack 15.8.2015, 1:26

Все просто. Перед вызовом QSqlDatabase::removeDatabase необходимо чтобы все объекты связанные с указанной базой данных были уничтожены. Об этом напрямую говорится в http://doc.qt.io/qt-5/qsqldatabase.html#removeDatabase.

В вашем случае следует переписать код примерно так:

Раскрывающийся текст
{
   QSqlDatabase cfgdb;
   cfgdb = QSqlDatabase::addDatabase("QSQLITE", "Rules");
   ...
   cfgdb.close();
}

QSqlDatabase::removeDatabase("Rules");

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)