Имя: Пароль:
1C
1C 7.7
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) Я это все читал)
Уже тестирую.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn