SQLite "On delete CASCADE" не каскадный в Qt - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть база данных в Qt.у него есть четыре таблицы: maingroup, subgroup, parts и position. Это моя база данных:

CREATE TABLE `maingroup` (
    `groupName`TEXT NOT NULL UNIQUE,
     PRIMARY KEY(`groupName`)
);
CREATE TABLE `subgroup` (
    `sub`   TEXT NOT NULL UNIQUE,
    `main`  TEXT NOT NULL,
    PRIMARY KEY(`sub`),
    FOREIGN KEY(`main`) REFERENCES `maingroup`(`groupName`) ON DELETE CASCADE
);
CREATE TABLE `parts` (
    `ID`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `Part_Number`   TEXT,
    `Type`  TEXT NOT NULL,
    `Value` TEXT,
    `Voltage`   TEXT,
    `Quantity`  TEXT,
    `Position`  TEXT,
    `Picture`   TEXT,
    FOREIGN KEY(`Position`) REFERENCES `Position`(`Poistion`) ON DELETE CASCADE,
    FOREIGN KEY(`Type`) REFERENCES `subgroup`(`sub`) ON DELETE CASCADE
);

Тип в частях таблицы - это внешний ключ, относящийся к столбцу sub из подгруппы таблицы.Основным в подгруппе таблицы является внешний ключ, относящийся к имени группы столбцов в таблице maingroup.моя проблема заключается в том, что когда я пытаюсь (delete from maingroup WHERE groupName= 'dd';) в браузере БД он удаляет как родительский, так и дочерний.Но в QT эта команда (myQuery.exec("delete from maingroup WHERE groupName= 'dd'");) просто удаляет родительское поле в таблице maingroup, а не дочерний элемент в таблице subgroup и part, а основной столбец в таблице subgroup ссылается на поле в таблице maingroup, которое не существует.что здесь не так? что мне делать?

1 Ответ

0 голосов
/ 25 ноября 2018

Вам необходимо включить прагму внешнего ключа, выполнив другой оператор перед оператором DELETE.

QSqlQuery q;
q.exec("PRAGMA foreign_keys = ON");
q.exec("DELETE FROM ...");

Это позволило каскадно удалять данные, а также должно быть достаточным для решения других связанных с внешним ключомвыпуски.

Кредиты для этого форума. qt.io post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...