Работа с базой данных SQLite (Qt4)

Модератор: Модераторы разделов

Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Работа с базой данных SQLite

Сообщение Assuri »

Скажите пожалуйста, как мне удалить старый коннект, чтобы не возникало таких ошибок:
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.

Re: Работа с базой данных SQLite

Сообщение eduard_pustobaev »

// 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
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: Работа с базой данных SQLite

Сообщение nonstop »

eduard_pustobaev скопировал тебе пример из доков
а вот обсуждение такого поведения -
http://lists.trolltech.com/qt4-preview-fee...ead00142-0.html
slackware - linux for human brains
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Работа с базой данных SQLite

Сообщение Assuri »

А что нужно сделать в моей ситуации?

Код: Выделить всё

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.

Re: Работа с базой данных SQLite

Сообщение eduard_pustobaev »

Код: Выделить всё

#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

Re: Работа с базой данных SQLite

Сообщение Assuri »

Дело в том, что QSqlDatabase db является членом класса. Что тогда делать?
Спасибо сказали:
aliens
Сообщения: 495
Статус: нетрушный
ОС: Gentoo & CentOS 5.1

Re: Работа с базой данных SQLite

Сообщение aliens »

эм, а просто закрыть конект? db.close() ?
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Работа с базой данных SQLite

Сообщение Assuri »

aliens писал(а):
02.12.2007 01:02
эм, а просто закрыть конект? db.close() ?

Та же ошибка.
Спасибо сказали: