SQLIte3 Удаление связанных записей из таблицы (Не работает)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
set
новенький
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

SQLIte3 Удаление связанных записей из таблицы (Не работает)

Сообщение set »

Есть таблица SQLite3

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

CREATE TABLE "t$1" (
   "id"   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
   "pid"   INTEGER,
   "name"   TEXT NOT NULL,
   FOREIGN KEY("pid") REFERENCES "t$1"("id") ON UPDATE CASCADE ON DELETE CASCADE
)

Средствами Lazarus (2.0.8 win64) операции по добавление и изменению записей выполняется без проблем.
НО!
При попытке удалить запись

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

delete from t$1 where id=2;

происходт следующее:

-если с этой записью не связаны другие записи в этой таблице, то удаление происходит без проблем
-если есть связанные записи, то запись с номером 2 удаляется, а связанные с ней записи остаются

Если выполнить запрос в стороннем приложении, например в DB Browser for SQLite, то связанные записи удаляются нормально.

Может кто-то сталкивался с подобной проблемой?
Подскажите, как победить?

p.s. При работе из lazarus используется библиотека sqlite3 v. sqlite-dll-win64-x64-3310100
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Вангую, что проблема в настройке транзакций.
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Если я правильно путаю, в SQLite это была отдельная фича(foreign key constraint enforcement?), которая включалась/выключалась отдельной прагмой и по умолчанию была выключена.
set
новенький
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

Сообщение set »

iskander писал(а):Если я правильно путаю, в SQLite это была отдельная фича(foreign key constraint enforcement?), которая включалась/выключалась отдельной прагмой и по умолчанию была выключена.


включил на этапе проектирования базы данных.
запрос PRAGMA foreign_keys; возвращает 1.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

set писал(а):включил на этапе проектирования базы данных.

Пишут, что PRAGMA foreign_keys = ON нужно посылать при каждом открывании БД. Рекомендуют даже в одном запросе посылать, типа такого:
PRAGMA foreign_keys = ON; DELETE FROM employees WHERE cod_emp=0;
set
новенький
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

Сообщение set »

Полтергейст какой-то....
Завтра сделаю базу данных консольной утилитой sqlite. Может так заработает...
Подключился к ранее созданной БД и консоль не отображает список таблиц.
Создал в консоли таблицу - все видит.
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

set писал(а):включил на этапе проектирования базы данных.
запрос PRAGMA foreign_keys; возвращает 1.

У меня с включенной прагмой foreign_keys ваша проблема не воспроизводится.
Ответить