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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt-5.7 sqlite: Не включается контроль внешних ключей  (Прочитано 3337 раз)
starling13
Гость
« : Сентябрь 07, 2016, 13:18 »

Не могу решить проблему:

Код:
    //...
    QSqlQuery query(_database);
     
    if (!query.exec("PRAGMA foreign_keys = ON"))
    qCritical() << "QSQLQuery::exec";
     
    if (!query.exec("PRAGMA foreign_keys"))
    qCritical() << "QSQLQuery::exec";
     
    if (query.next())
            // Всегда выводит "0", хотя при использовании утилиты командной строки
            // sqlite3 запрос "PRAGMA foreign_keys" возвращает 0 или 1 в соответствии
            // со значением, которое было установлено последним запросом
            // "PRAGMA foreign_keys = ON|OFF"
    qDebug() << query.value(0).toUInt();
     
    if (!query.prepare("DELETE FROM \"MASTER_TABLE\" WHERE ID = :id"))
           qCritical() << "QSQLQuery::prepare";
     
    query.bindValue(":id", id);
    if (!query.exec())
          qCritical() << "QSQLQuery::exec";
     
    // Запись в MASTER_TABLE удаляется, запись в DETAIL_TABLE, содержащая
    // внешний ключ с установленным ON DELETE CASCADE не удаляется.
Записан
starling13
Гость
« Ответ #1 : Сентябрь 07, 2016, 14:48 »

Проблема была в том, что перед попыткой изменения контроля внешних ключей начиналась транзакция.
Как сказано в документации sqlite
Цитировать
It is not possible to enable or disable foreign key constraints in the middle of a multi-statement transaction (when SQLite is not in autocommit mode). Attempting to do so does not return an error; it simply has no effect.

Решено.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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