Sqlite3+TSQLScript+create trigger?

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

Ответить
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Sqlite3+TSQLScript+create trigger?

Сообщение ViruZ »

Здравствуйте, возникла проблема создания триггера SQLite3 через SQLSript.
Если тот же скрипт исполняется в DBeaver или Db browser for SQLite, все отрабатывает нормально.
Вся структура БД создается программно скриптом, если код триггера выбросить, отрабатывает нормально, если добавляю триггер (или отдельно исполняю скрипт создания триггера), появляется ошибка "SQLite3Connection1 : incomplete input".
Код триггера:

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

CREATE TRIGGER "nak_apply"
      AFTER UPDATE
      ON "REG_HNAK"
      FOR EACH ROW
BEGIN
      UPDATE REG_NAK SET SAVED=NEW.SAVED WHERE HNAK=OLD.ROWID;
END;

Все таблицы в БД на момент создания триггера уже существуют.
Выполнение того же скрипта и через SQLite3Connection.ExecuteDirect, и через SQLQuery.Execute приводит к одинаковому результату.
ОС: Linux Mint 20.2/Windows7 x64, CodeTyphon 7.5/FPC 3.3.1
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

ViruZ писал(а):Выполнение того же скрипта и через SQLite3Connection.ExecuteDirect, и через SQLQuery.Execute приводит к одинаковому результату.

Какому? :D
А Вы не пробовали названия триггера и таблицы писать без кавычек?
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

К ошибке :(
Пробовал, та же ошибка - SQLite3Connection1 : incomplete input
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Тут явно требуются эксперименты. Судя по ошибке, SQLite3 ждал какого-то символа, но не дождался.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

SQLScript.Terminator измените на что-нибудь отличное от ;
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Спасибо, помогло!
Изменил терминатор на #, соответственно после каждого действия со структурой в скрипте добавил терминатор, после этого структура создается одним скриптом так, как мне и нужно.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

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

ViruZ, я сам когда-то на это нарывался...
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Тему можно считать закрытой. Решил проблему небольшой модификацией скрипта создания структуры БД (без изменения значения SQLScript.Terminator) - в начале скрипта прописал строчку

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

SET TERM ^;

Соответственно после каждой точки с запятой в скрипт добавил ^, а в конце скрипта всё вернул обратно:

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

SET TERM ;^

Теперь вся структура создаётся с помощью одного скрипта без всяких ошибок.
Всем спасибо за помощь!
Ответить