Иллюстрированный самоучитель по Visual FoxPro 8

Использование триггеров и хранимых процедур

Проверка удовлетворения введенных значений заданному условию

В данном примере определим условие проверки достоверности ввода данных для таблицы ordsaied, содержащей информацию о заказе. Например, при формировании накладной отпуска товара в кредит необходимо сравнивать итоговую сумму заказываемых товаров с максимально допустимым кредитом для данного клиента, содержащимся в таблице customer. Проверку будем осуществлять при вводе каждой позиции заказа.

  1. Откройте окно проекта sales.
  2. Выберите в окне проекта таблицу ordsaied и нажмите кнопку Modify (Модифицировать).
  3. Для определения свойств таблицы перейдите на вкладку Table (Таблица).
  4. В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit (), которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента.
  5. В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 14.5) Превышена допустимая сумма кредита клиента.

    Иллюстрированный самоучитель по Visual FoxPro 8 › Условия достоверности, хранимые процедуры, триггеры, представления данных › Использование триггеров и хранимых процедур

    Рис. 14.5. Определение условия достоверности данных

  6. Определим функцию CheckMaxCredit как свойство базы данных, поэтому создадим ее в виде хранимой процедуры.

Для создания хранимой процедуры checkMaxCredit в окне редактирования хранимых процедур, которое содержит ранее созданные программы. введите следующий текст:

procedure CheckMaxCredit
nCdOrder=Ordsaled.icdOrder ыь номер текущего заказа
*вычисляем сумму всех введенных позиций заказа
SELECT SUM(Ordsaled.nQuant*Ordsaled.nUnitPrice);
FROM Ordsalem, Ordsaied;
WHERE Ordsalem.icdOrder = Ordsaied.icdOrder;
AND Ordsaied.icdOrder=nCdOrder; INTO ARRAY nSum
*определяем максимальный кредит клиента из таблицы Customer
SELECT Customer
SEEK Ordsalem.icdCustomer
*если запись о данном покупателе в таблице Customer есть, возвращаем
*результат сравнения суммы заказа с максимальным кредитом
IF FOUND()
RETURN nSum(l) < CUSTOMER.yCreditLimit
ELSE
RETURN.F.
ENDIF
RETURN
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.