Russian Qt Forum
Сентябрь 30, 2024, 08:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как правильно отключить БД?  (Прочитано 9758 раз)
lrx2
Гость
« : Декабрь 16, 2011, 23:16 »

Снова я.
При попытке
Код:
    qDebug() << "BeforeDelete" << db.connectionNames();
    db.close();
    QSqlDatabase::removeDatabase(db.connectionName());
    qDebug() << "AfterDelete" << db.connectionNames();
В дебаг-консоль выводится:
Код:
BeforeDelete ("qt_sql_default_connection") 
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
AfterDelete ()
Никаких вьюшек\моделей\запросов к БД в проге нет.

БД подключается сл. образом:
Код:
db = QSqlDatabase::addDatabase(tr("QPSQL"));
        if(!db.isValid()){
            QString qs;
            qs.append(tr("DLL драйверов для PostgreSQL не найдены:\n\n'%1;'").arg(db.lastError().text()));
            qs.append(tr("\n\nDll должны располагаться по одному из путей : \n\n%1\n\n\n%2").arg(QApplication::libraryPaths() [0],QApplication::libraryPaths()[1]));
            FATAL(qs);
            return;
        }

        db.setHostName("localhost");
        db.setDatabaseName("dlongbase");
        db.setUserName("postgres");
        db.setPassword("pswd");
        db.setPort(5432);

        if (!db.open()){
            FATAL(tr("Невозможно подключиться к указанной БД:\n\n%1::%2").arg(db.hostName(), db.databaseName()));
            return;
        }
Что может быть не так?
Всмсле - очень хочется  устранить надпись:"
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work." -
ровно как и причину её появления..
« Последнее редактирование: Декабрь 16, 2011, 23:17 от lrx2 » Записан
Странник
Гость
« Ответ #1 : Декабрь 16, 2011, 23:31 »

читайте доки = )

Цитировать
void QSqlDatabase removeDatabase ( const QString &connectionName ) [static]

Removes the database connection connectionName from the list of database connections.
Warning: There should be no open queries on the database connection when this function is called, otherwise a resource leak will occur.

Example:
Код:
    // WRONG
    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
    QSqlDatabase::removeDatabase("sales"); // will output a warning
    
    // "db" is now a dangling invalid database connection,
    // "query" contains an invalid result set

The correct way to do it:
Код:
    {
        QSqlDatabase db = QSqlDatabase::database("sales");
        QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
    }
    // Both "db" and "query" are destroyed because they are out of scope
    QSqlDatabase::removeDatabase("sales"); // correct
« Последнее редактирование: Декабрь 16, 2011, 23:33 от Странник » Записан
lrx2
Гость
« Ответ #2 : Декабрь 17, 2011, 00:49 »

Ага, спасибо.
Почему-то именно там, где надо, смотреть не стал...
Т.е., чтоб QSqlDatabase::removeDatabase без ошибок и ругани сработал,
надо и объект бд чтоб уже разрушился?

...Убрал объект QSqlDataBase из глобальной области видимости -
он терь только в функции коннекта к базе есть.

Код:
    QSqlDatabase::removeDatabase(QSqlDatabase::database().connectionName());
    qDebug() << "AfterDelete" << QSqlDatabase::database().connectionNames();
Ничего не изменилось.
Записан
arhohryakov
Гость
« Ответ #3 : Декабрь 17, 2011, 01:48 »

Возможно у тебя база связана с моделями и отображениями.
Посмотри http://www.prog.org.ru/index.php?topic=20166.msg136812#msg136812
Записан
lrx2
Гость
« Ответ #4 : Декабрь 17, 2011, 08:11 »

"Старый баян" уже видел.
Как уже писал выше, все вьюхи и пр. отключены.
Код:
QString qs;
    {
        qs.append(QSqlDatabase::database().connectionName());
    }
    QSqlDatabase::removeDatabase(qs);
    qDebug() << "AfterDelete" << QSqlDatabase::database().connectionNames();
Так сработало.
Всем спасибо)
Записан
AlekseyK
Гость
« Ответ #5 : Январь 19, 2012, 05:49 »

Благодарю и мне помогло! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 2.975 секунд. Запросов: 21.