Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

14.6.3. Триггеры

Триггер оформляется в виде логического выражения, употребляемого для проверки корректности операций по модификации таблицы базы данных. Триггер может быть создан либо интерактивно (см. разд. 2.4), либо программно для проверки операции удаления, вставки или обновления.

Свободная, не входящая в базу данных таблица триггеров иметь не может.

Команда

CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression

создает триггер удаления, вставки или обновления для таблицы TableName текущей базы данных.

Опции и параметр:

FOR DELETE | INSERT | UPDATE – задает тип триггера. Если SET SAFETY установлен в ON и триггер уже существует, то возникнет предупреждение.

AS lExpression – задает логическое выражение, оцениваемое при выполнении триггера. Может быть пользовательской функцией, размещенной, например, в хранимых процедурах базы данных.

Для анализа ошибки функция, реализующая lExpression, может включать AERROR( ).

Если при срабатывании триггера обнаружена ошибка (lExpression возвращает .T.), то выполнится ON ERROR-процедура, если она активизирована, или обработчик соответствующего события Error. При отсутствии процедуры (обработчика) сообщение об ошибке генерируется системным обработчиком VFP. Команда или событие, приведшее к отказу триггера, не выполняется.

К срабатыванию триггера удаления, вставки или обновления приводят следующие команды и события:

  • триггер удаления:

  • DELETE;

  • запись получает пометку удаления интерактивно;

  • триггер вставки:

  • APPEND FROM или APPEND FROM ARRAY, или APPEND BLANK;

  • запись добавляется интерактивно;

  • IMPORT;

  • INSERT – SQL;

  • RECALL;

  • пометка удаления снимается интерактивно;

  • триггер обновления:

  • GATHER;

  • REPLACE или REPLACE FROM ARRAY;

  • UPDATE – SQL;

  • интерактивное изменение записи.

Замечание. Команда INSERT не может употребляться с таблицей, имеющей триггер вставки, взамен используется INSERT – SQL.

При работе с триггерами следует учитывать, что:

  • выполнение PACK не приводит к срабатыванию ни одного из триггеров;

  • выполнение ZAP не приводит к срабатыванию триггера удаления;

  • триггеры не выполняются, когда обновляется запись с пометкой удаления;

  • в зависимости от способа буферизации может возникнуть задержка выполнения триггера.

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

&& Создаем триггер обновления

create trigger on Authors for update as AuthorId >= 0

use Authors

&& Если теперь выполнить команду

&& replace AuthorId with –1

&& то откажет триггер обновления и возникнет ошибка

&& Record validation rule is violated

Системная переменная

_TRIGGERLEVEL = nExpression

содержит доступное только для чтения число, показывающее уровень вложения текущей процедуры триггера. Если триггер не исполняется, то _TRIGGERLEVEL содержит 0.

Команда

DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE

удаляет триггер удаления, вставки или обновления для таблицы TableName текущей базы данных.

14.6.4. Хранимые процедуры

Хранимые процедуры – это процедуры, загружаемые при открытии базы данных и освобождаемые из памяти при закрытии базы данных.

С базой данных следует хранить следующие процедуры:

  • обработчики событий базы данных;

  • правила проверки ссылочной целостности данных;

  • триггеры таблиц базы данных.

В общем случае, однако, с базой данных могут храниться процедуры любого назначения.

Хранимые процедуры открытой базы данных могут быть вызваны из любого программного компонента приложения.

Команда

APPEND PROCEDURES FROM FileName [AS nCodePage] [OVERWRITE]

добавляет (копирует) в хранимые процедуры текущей базы данных процедуры текстового файла FileName. Если задана опция OVERWRITE, то копируемые процедуры замещают имеющиеся хранимые процедура, или добавляются к ним – в противном случае.

Команда APPEND PROCEDURES не может применяться в распространяемом EXE-файле: при попытке ее использования генерируется ошибка "Feature is not available".

Команда

COPY PROCEDURES TO FileName [AS nCodePage] [ADDITIVE]

копирует хранимые процедуру текущей базы данных в текстовый файл FileName.

Описание опций и параметров см. в табл. 1.6.

Команда

MODIFY PROCEDURE [NOWAIT]

открывает текстовый редактор VFP, в котором можно создать новые или изменить существующие хранимые процедуры текущей базы данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]