Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SQLITE. Два подключения к базе
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
berserk
Всем привет!
Есть БД на SQLITE, лежит на ntfs, OS Windows. Заметил струнную вещь.
Если мною написанную программу запустить 2 раза, то писать в любую таблицу базы может только первая. Второй экземпляр программы создаёт журнал, но накатить его не может.
Вроде бы логично. NTFS - блокировки...
Но те же действия работают в Sqliteman. Т.е. Если его запустить его 2 раза и подключить один файл базы, то можно поочерёдно писать в одну и туже таблицу.
Хотя первый экземпляр так же блокирует базу.

Либо я что то не то написал в своей программе, либо у sqliteman хитрый способ какой то.
Кто знает объясните...
Iron Bug
телепатов нет. кода никто не видел.
berserk
Цитата(Iron Bug @ 22.4.2014, 14:15) *
телепатов нет. кода никто не видел.


Запускаю программу...

Открываю соединение с базой
db = new QSqlDatabase;
*db = QSqlDatabase::addDatabase("QSQLITE");
    db->setDatabaseName(QApplication::applicationDirPath()+"/database.db");
    if (!db->open())
    {
        QString error_db = db->lastError().text();
        QMessageBox::critical(this, "error", error_db);
        db->close();
        exit(1);
        return false;
    }
query = new QSqlQuery;


Гдето в коде


query->prepare("INSERT INTO firm (id, value)"
                            "VALUES (?, ?)");
    query->addBindValue(ui->lineEdit_id->text());
    query->addBindValue(ui->lineEdit_value->text());
    query->exec();
    query->clear();


Перед закрытием программы
db->close();


как то так.
Iron Bug
я подозреваю, что надо сессию открывать с BEGIN IMMEDIATE, но как это делается в Qt подсказать не могу.
Гость_berserk_*
Цитата(Iron Bug @ 22.4.2014, 20:48) *
я подозреваю, что надо сессию открывать с BEGIN IMMEDIATE, но как это делается в Qt подсказать не могу.


Щас погугим...
блин, а в linux всё ок.
berserk
Цитата(Гость_berserk_* @ 22.4.2014, 22:04) *
Цитата(Iron Bug @ 22.4.2014, 20:48) *
я подозреваю, что надо сессию открывать с BEGIN IMMEDIATE, но как это делается в Qt подсказать не могу.


Щас погугим...
блин, а в linux всё ок.


Спасибо! Всё получилось.

Все запросы с записью в БД заключил в

query->exec("BEGIN IMMEDIATE TRANSACTION");

//запросы

query->exec("COMMIT");
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.