Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сокращённые консультации к ГОС.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
377.34 Кб
Скачать

40. Контроль достоверности данных на уровне таблицы

Триггеры

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

Триггер – это код, выполняющий проверку данных при их добавлении, удалении или редактировании. Он представляет собой логическое выражение, возвращающее значение .T. или .F. Триггер автоматиче­ски выполняется при каждой попытке изменить защищаемые данные. Если, после проверки поставленного условия триггер возвращает значение .T., то всё в порядке – действие выполняется! Т.о. триггеры обеспечивают целостность данных, предотвращая их несанкцио­нированное или неправильное изменение.

Триггер является частью транзакции, следовательно, если триггер терпит неудачу, отменяется вся транзакция. И наоборот, если какая-то часть тран­закции не удалась, то и триггер будет отменен.

На уровне таблицы контроль может производиться:

  • на уровне свойств поля таблицы (вкладка Fields окна конструктора таблиц – Table Designer); используется, если необходима проверка при добавлении или удалении записи;

  • на уровне свойств таблицы в целом (вкладка Table окна конструктора таблиц); осуществляется, если необходима проверка нескольких записей таблицы.

При определении условий достоверности ввода данных используются триггеры и хранимые процедуры.

Контроль достоверности ввода данных на уровне записи. Рассмотрим пример контроля ввода данных на уровне свойств поля таблицы. На вкладке Fields используем область Field validation (Проверка правильности ввода в поле) окна конструктора таблиц. (Рис.38)

В поле Rule (Условие, правило) задается логическое выражение, а в поле Message (Сообщение) – сообщение, отображаемое на экране, если логическое выражение возвращает значение False.

Рассмотрим пример. Откройте таблицу Products базы данных TestData. Допустим в эту таблицу, в графу unit_cost, нельзя вводить стоимость товара свыше $100.

Введём в поле Rule логическое выражение

IIF(products.unit_cost>$100,.F.,.T.) && здесь IIF() – функция VFP, альтернативная форма IF…ENDIF структуры; определяет одно из двух значений, основанных на логическом выражении;

&& обратите внимание на то, что название таблицы предшествует названию поля; они разделены точкой;

&& символ доллара появился в выражении в связи с тем, что в данном столбце таблицы использован тип данных Currency (валюта).

В поле Message введём сообщение:

“Не свыше $100”

Заканчивая создание правила, нажмите кнопку ОК в окне конструктора таблиц. В открывшемся окне запроса снимите отметку в поле «Compare the rules against existing data» и щёлкните по кнопке Yes. Окно конструктора закроется.

Если теперь, открыть таблицу Products и попытаться ввести в поле unit_cost стоимость более $100, будет появляться сообщение, предупреждающее об ошибке. Введённые данные не сохраняются.