|
v7: 1SQLite: Триггер для внешней базы. | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
08.02.13
✎
09:38
|
Добрый день. Есть внешняя база SQLite, с которой пользователи будут работать через консоль (ТП). Можно ли создать триггер, для обработки флага записи? Т.е. если записывается или запрещена к редактированию текущая запись - обождать пока запишется, и тогда только внести изменения? Раньше никогда такого не делал, но как посмотрел (вот здесь например http://club.shelek.ru/viewart.php?id=353) - это вроде несложно, только взлетит ли?
Окончательно вопрос такой: можно ли триггер написать, и если да - то как он пишется (в см. алгоритм)? |
|||
1
mikecool
08.02.13
✎
09:39
|
написать можно
как - смотреть у каждого скуля правила |
|||
2
ЧеловекДуши
08.02.13
✎
09:46
|
(0) Пиши, кто не дает. Единственный вопрос, а не удалится ли этот триггер, когда в 1С будут внесены изменения? ;)
|
|||
3
ЧеловекДуши
08.02.13
✎
09:48
|
(1)Если только сформировать некую таблицу, которой будет тот или иной идентификатор записи.
И по окончании записи проводить состояние этой ячейки (курсора)... типо того. |
|||
4
Zhuravlik
08.02.13
✎
10:01
|
(0) В смысле?
(3) Ну, я хочу сделать так: необходимо внести запрет на изменение записи с флагом закрытия = 1, и ожидание с флагом записи = 1. Сижу, курю это дело здесь вот - http://sb-money.ru/sqlite.php?page=43, я честно очень отдаленно представляю себе принцип работы триггера, и как он создается. Насколько понимаю - его нужно объявить один раз при запуске базы, а потом он работает как-бы в фоне, реагируя на объявленные события. Так? Может есть пример у кого, именно для СкульЛайт? И подскажите пожалуйста, как анализировать его работу? В статье прог смотрит на какую-то консоль... |
|||
5
Mikeware
08.02.13
✎
10:07
|
(4) а учебник, конечно, читать не пробовал - сразу на форум гадить кинулся?
|
|||
6
Zhuravlik
08.02.13
✎
10:10
|
Флаг закрытия и флаг записи - это поля в таблице, если с закрытием все понятно (он объявляется, когда строка скопирована в другую таблицу - но тут я и в UPDATE могу сказать WHERE флЗакрыт = 0), то с записью не очень. Или он вообще по-ходу не нужен, раз триггер реагирует на СОБЫТИЕ...
(5) Пробовал, просто делаю параллельно, но статья была прочитана перед тем, как создал эту ветку. Ну почему сразу гадить?)) Если бы я хоть приблизительно себе представлял как это работает - сидел бы сам разбирал, а тут вдруг кто пример кинет, или скажет что. |
|||
7
Zhuravlik
08.02.13
✎
10:18
|
А скажите, может мне и триггер не нужен, может я попутал? Насколько я про них понял, триггеры нужны для обновления связанных таблиц, просто подумал про транзакцию - наткнулся на "BEGIN TRANSACTION" - я в ту сторону рою? В смысле будет задержка перед INSERT/UPDATE если я ее обьявлю??
|
|||
8
Zhuravlik
08.02.13
✎
10:26
|
"триггеры нужны для обновления связанных таблиц" - это правильно суждение? И к нему применимо слово "только"? Как их используют?
|
|||
9
Mikeware
08.02.13
✎
10:41
|
"Триггеры - это функции базы (trigger-action), которые автоматически выполняются, при наступлении заданных событий базы (database-event)."
события - "выполнении DELETE, INSERT или UPDATE для таблицы, а также UPDATE одного или более заданных полей таблицы." действия - какие ты определищь.в т.ч. и "Специальная функция SQL RAISE() может использоваться внутри программ-трниггеров, со следующим синтаксисом raise-function ::= RAISE ( ABORT, error-message ) | RAISE ( FAIL, error-message ) | RAISE ( ROLLBACK, error-message ) | RAISE ( IGNORE ) Когда вызывается одна из первых трех форм, при выполнении триггеров, выполняется заданный ON CONFLICT (из ABORT, FAIL или ROLLBACK) и текущий запрос прерывается. Пользователю возвращается код ошибки SQLITE_CONSTRAINT, с заданным сообщением. Когда вызывается RAISE(IGNORE), запрос, вызвавший текущий триггер и все выполняемые триггеры прерываются. Никаких изменений в базе не откатывается. Если запрос, запрос, вызвавший триггер - часть триггера, то его выполнение продолжается со следующего шага. " ------------ все написано по-русски... |
|||
10
Zhuravlik
08.02.13
✎
11:08
|
(9) Я это все читал)
Уже тестирую. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |