Создает для таблицы триггер Delete (удаления), Insert (добавления) или Update (обновления).
CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression |
Параметры
- TableName
- Задает таблицу в текущей базе данных, для которой создается триггер.
- FOR DELETE | INSERT | UPDATE
- Задает тип триггера, который создает Visual FoxPro. Если триггер указанного типа уже существует и команда SET SAFETY установила значение ON, Visual FoxPro спросит, следует ли вести запись поверх существующего триггера. Если команда SET SAFETY установила значение OFF, запись будет автоматически вестись поверх существующего триггера.
- AS lExpression
- Задает логическое выражение, вычисляемое при выполнении триггера. В качестве lExpression может фигурировать функция, определенная пользователем, или хранимая процедура, возвращающая логическое значение. Хранимые процедуры можно создать для таблицы с помощью команды MODIFY PROCEDURE. Пользовательская функция или хранимая процедура могут применять функцию AERROR( ), чтобы определить имя таблицы, для которой сработал триггер, и тип триггера. Если вычисление выражения lExpression дает значение "истина" (.T.), выполняется команда или событие, которые привели к срабатыванию триггера. Если значение выражения lExpression есть "ложь" (.F.), команда или событие, запустившие триггер, не выполняются. Если активна процедура ON ERROR, она будет выполнена вместо команды или события. Если процедура ON ERROR не является активной, команда или событие не выполняются, а Visual FoxPro выдает сообщение об ошибке.
Комментарии
Пользуйтесь командой CREATE TRIGGER для того, чтобы отлавливать события, вызывающие удаление, добавление или изменение записей в таблице. Триггеры удаления, добавления или обновления можно создать только для таблицы, включенной в базу данных. Для создания базы данных используйте команду CREATE DATABASE, а для добавления в нее таблицы ѕ команду ADD TABLE. Для команды CREATE TRIGGER необходимо монопольное использование базы данных. Чтобы открыть базу данных в монопольном режиме, включите предложение EXCLUSIVE в команду OPEN DATABASE.
В следующих списках перечисляются события, которые вызывают срабатывание триггеров Delete, Insert или Update.
Событие | Результат |
---|---|
Триггер Delete |
|
Триггер Insert |
|
Триггер Update |
|
Если буферизация таблицы действует, триггер Update срабатывает после выдачи команды TABLEUPDATE( ) и обновлении каждой буферизованной записи в таблице.
Пример
В следующем примере создается триггер Update, который предотвращает ввод в поле maxordamt
таблицы customer
значений свыше 50. Когда выполняется первая команда REPLACE из-за того, что значение поля maxordamt
превысило 50, генерируется сообщение об ошибке. Вторая команда REPLACE не генерирует ошибку, поскольку значение в поле maxordamt
не превышает 50.
![]() | |
---|---|
CLOSE DATABASES OPEN DATABASE (HOME(2) + 'data\testdata') USE customer && Открытие таблицы customer * Set trigger on maxordamt field to fail with values <= 50 CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50 ON ERROR && Востанавливаем системный обработчик ошибок WAIT WINDOW "Press a key to test trigger with value of 60"+CHR(13); +"When you get the error message, press Ignore." REPLACE maxordamt WITH 60 && Displays an error message ? maxordamt WAIT WINDOW "Press a key to test with value of 50." REPLACE maxordamt WITH 50 && Value is accepted ? maxordamt DELETE TRIGGER ON customer FOR UPDATE && Remove the trigger |
Смотреть также
Другие ресурсы
ADD TABLE CommandAERROR( ) Function
CREATE DATABASE Command
DELETE TRIGGER Command
DISPLAY DATABASE Command
LIST DATABASE Command
OPEN DATABASE Command
Commands
Language Reference