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

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

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

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

Сообщение set » 29.04.2020 20:28:48

Есть таблица 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
set
новенький
 
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

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

Сообщение Снег Север » 30.04.2020 10:30:54

Вангую, что проблема в настройке транзакций.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2994
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение iskander » 30.04.2020 13:23:27

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

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

Сообщение set » 30.04.2020 15:31:02

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


включил на этапе проектирования базы данных.
запрос PRAGMA foreign_keys; возвращает 1.
set
новенький
 
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

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

Сообщение Снег Север » 30.04.2020 18:25:20

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

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

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

Сообщение set » 30.04.2020 21:55:49

Полтергейст какой-то....
Завтра сделаю базу данных консольной утилитой sqlite. Может так заработает...
Подключился к ранее созданной БД и консоль не отображает список таблиц.
Создал в консоли таблицу - все видит.
set
новенький
 
Сообщения: 11
Зарегистрирован: 23.12.2013 14:11:29

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

Сообщение iskander » 02.05.2020 15:58:05

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

У меня с включенной прагмой foreign_keys ваша проблема не воспроизводится.
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013 и гости: 33

Рейтинг@Mail.ru