Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб работы БД 2012-13.docx
Скачиваний:
45
Добавлен:
20.03.2016
Размер:
8.97 Mб
Скачать
    1. Условия достоверности ввода данных на уровне поля таблицы

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

Для определения условия достоверности ввода данных на уровне поля таблицы используется область Field validation (Проверка правильности ввода) вкладки Fields (Поля) окна конструктора таблиц. В поле Rule (Условие) задается логическое выражение, а в поле Message (Сообщение) — сообщение, отображаемое на экране, если логическое выражение возвращает значение False (Ложь).

Задача: Определить условие достоверности данных для поля nquant, содержащего количество купленного товара, таблицы ordsaied. При вводе количества товара необходимо автоматически проверять его фактическое количество на складе.

Для определения данного условия достоверности данных необходимо выполнить следующие действия:

  1. Открыть проект sales.

  2. Перейти на вкладку Data (Данные).

  3. В разделе Tables (Таблицы) выбрать таблицу ordsaied и нажмите кнопку Modify (Модифицировать).

  4. В окне конструктора таблицы выбрать поле nquant.

  5. В поле ввода Rule (Условие) области Field validation (Проверка правильности ввода) ввести вызов функции checkQuant ().

  6. В поле ввода Message (Сообщение) ввести текст сообщения: "Заказанное количество товара превышает его фактическое количество.

  7. Открыть окно редактирования хранимых процедур и добавить в него новую процедуру CheckQuant:

procedure CheckQuant

nCdGoods = Ordsaied.iCdGoods

* определяем фактическое количество товара

SELECT nFactQuant;

FROM Goods;

WHERE iCdGoods = nCdGoods;

INTO ARRAY nQuant

* сравниваем заказанное количество с имеющимся на складе

RETURN Ordsaied.nQuant(1) <= nQuant(1)

    1. Условия достоверности ввода данных на уровне записей

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

Для определения свойств таблицы необходимо открыть окно конструктора для выбранной таблицы и перейти на вкладку Table (Таблица) (рис.3).

Рис.3 Определение свойств таблицы

Для определения достоверности ввода данных могут использоваться триггеры добавления и изменения и поля ввода Rule (Условие) и Message (Сообщение) области Record validation (Проверка правильности ввода записей). В поле Rule (Условие) вводится логическое выражение, которое может содержать вызов хранимой процедуры. Если значение этого выражения равно True (Истина), то считается, что введены допустимые данные и разрешается переход на другую запись или закрытие таблицы. В противном случае выводится сообщение об ошибке, которое было задано в поле Message (Сообщение).

    1. Триггеры

Триггер – это выражение, значение которого вычисляется при наступлении определенного события. Это значение может быть только логического типа (.N. или .F.)

В Visual FoxPro для таблиц, входящих в состав базы данных, можно определить триггеры, приведенные в табл.1.

Таблица 1

Триггеры

Триггер

Описание

Insert

(Вставить)

Определяет действия, которые будут выполняться после добавления новой записи в таблицу

Update (Обновить)

Определяет действия, которые будут выполняться после изменения записи таблицы

Delete

(Удалить)

Определяет действия, которые будут выполняться после удаления записи из таблицы

Для определения триггеров необходимо ввести в поля ввода Insert trigger (триггер Вставить), Update trigger (триггер Обновить) или Delete trigger (триггер Удалить) вкладки Table (Таблица) окна конструктора выбранной таблицы операторы сравнения, вызов хранимой процедуры или любое логическое выражение. Если результат вычисления выражения равен True (Истина), то считается, что введены допустимые значения. В противном случае сохранения введенных данных не происходит и формируется сообщение об ошибке. При использовании хранимых процедур можно не только проверить условие достоверности ввода данных, но и задать действия, выполняемые при добавлении, удалении и изменении данных.

Вызов триггера Delete (Удалить) осуществляется:

  • при выполнении команды DELETE;

  • при пометке записи на удаление в режиме Browse (Обзор) или Edit (Правка).

Вызов триггера Insert (Вставить) осуществляется:

  • при выполнении команд APPEND FROM, APPEND FROM ARRAY,-APPEND BLANK;

  • при добавлении в таблицу новой записи в режиме Browse (Обзор) или Edit (Правка);

  • при выполнении команд IMPORT, INSERT SQL, RECALL;

  • при снятии метки об удалении записи в режиме Browse (Обзор) или Edit (Правка).

Вызов триггеар Update (Обновить) осуществляется:

  • при наступлении любого события, которое приводит к модификации записи (например, при изменении значения поля);

  • при выполении команд GATHER, REPLACE, REPLACE FROM ARRAY, UPDATE SQL.

Если выражение триггера вернет истину, то сделанные модификации принимаются и записываются в БД. Иначе модификации отвергаются и генерируется ошибка с кодом 1539 (ошибка триггера). Уточнить, какой именно вид триггера вызвал ошибку, можно, использую функцию ARERROR().

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

При использовании триггеров необходимо учитывать ограничения, имеющиеся в Visual FoxPro.

  • При модификации записей, помеченных для удаления, и выполнении команды PACK триггеры не вызываются.

  • Выполнение команды ZAP не вызывает триггер Delete (Удалить).

  • При использовании буферизации ввода триггер update (Обновить) вызывается только при вызове функции TABLEUPDATE ().

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

Контрольные вопросы:

  1. Что такое ограничение целостности?

  2. В чем важность задания ограничения целостности?

  3. Какие виды ограничений целостности существуют?

  4. Какие способы задания ограничений целостности существуют?

  5. Объясните роль триггеров для контроля целостности данных?

  6. Для чего используются хранимые процедуры?

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