Модератор: Модераторы разделов
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 28.11.2007 18:51
Скажите пожалуйста, как мне удалить старый коннект, чтобы не возникало таких ошибок:
QSqlDatabasePrivate::removeDatabase: connection 'sqlite' is still in use, all queries will cease to work
Сейчас у меня такой код:
Код: Выделить всё
QSqlDatabase::removeDatabase("sqlite");
db = QSqlDatabase::addDatabase("QSQLITE","sqlite");
databaseName = fileName;
db.setHostName("localhost");
db.setDatabaseName(databaseName);
db.setUserName("user");
db.setPassword("");
if ( !db.open() )
...
Как мне его изменить?
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.
Сообщение
eduard_pustobaev » 28.11.2007 23:00
// 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
В дисгармонии со вселенной.
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 01.12.2007 14:05
А что нужно сделать в моей ситуации?
Код: Выделить всё
QSqlDatabase::removeDatabase("sqlite");
db = QSqlDatabase::addDatabase("QSQLITE","sqlite");
databaseName = fileName;
db.setHostName("localhost");
db.setDatabaseName(databaseName);
db.setUserName("user");
db.setPassword("");
if ( !db.open() )
{
....
return;
}
query = new QSqlQuery(db);
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.
Сообщение
eduard_pustobaev » 01.12.2007 15:10
Код: Выделить всё
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","sqlite1");
QSqlQuery *query1 = new QSqlQuery(db);
}
QSqlDatabase::removeDatabase("sqlite1");
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","sqlite");
db.setHostName("localhost");
db.setDatabaseName("databaseName");
db.setUserName("user");
db.setPassword("");
if ( !db.open() )
{
}
QSqlQuery *query = new QSqlQuery(db);
return app.exec();
}
В дисгармонии со вселенной.
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 01.12.2007 15:19
Дело в том, что QSqlDatabase db является членом класса. Что тогда делать?
aliens
Сообщения: 495
Статус: нетрушный
ОС: Gentoo & CentOS 5.1
Сообщение
aliens » 02.12.2007 01:02
эм, а просто закрыть конект? db.close() ?
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 02.12.2007 07:35
aliens писал(а): ↑ 02.12.2007 01:02
эм, а просто закрыть конект? db.close() ?
Та же ошибка.