- •Методические указания
- •1.Определение значения поля при добавлении новой записи
- •2.Проверка удовлетворения введенных значений заданному условию
- •3.Действия, выполняемые при добавлении новых записей
- •4.Условия достоверности ввода данных на уровне поля таблицы
- •Подготовка к работе с сетью
- •Установка дистрибутива
- •Работа с виртуальными хостами
- •Контроллер удаленного доступа
- •Прокси-сервер
- •Int mysql_connect(string hostname, string username, string password);
- •Void mail(string to, string subject, string message, string add_headers);
- •Int mysql_num_rows(int result);
1.Определение значения поля при добавлении новой записи
Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.
Откройте окно проекта sales.
Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.
Выберите в окне проекта таблицу customer и нажмите кнопку Modify (Модифицировать).
Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).
В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum() , введя GetAutoNewNum("'Customer ") (рис. 2.4).
Нажмите кнопку ОК для закрытия конструктора таблицы.
Теперь необходимо определить функцию GetAutoNewNum. Откройте окно редактирования хранимой процедуры и введите следующие команды:
FUNCTION GetAutoNewNum
LPARAMETERS cNameTable
LOCAL nValue
cNameTable=ALLTRIM (UPPER (cNameTable) )
IF FOUND()
APPEND BLANK
REPLACE NameOfTable WITH cNameTable
REPLACE NumberKey WITH 1
ELSE
REPLACE NumberKey WITH NumberKey+1
ENDIF
nValue=NumberKey
SELECT (cNameTable)
RETURN nValue
Рис. 2.4. Задание вызова хранимой процедуры
2.Проверка удовлетворения введенных значений заданному условию
В данном примере определим условие проверки достоверности ввода данных для таблицы ordsaled, содержащей информацию о заказе. Например, при формировании накладной отпуска товара в кредит необходимо сравнивать итоговую сумму заказываемых товаров с максимально допустимым кредитом для данного клиента, содержащимся в таблице customer. Проверку будем осуществлять при вводе каждой позиции заказа.
Откройте окно проекта sales.
Выберите в окне проекта таблицу ordsaled и нажмите кнопку Modify (Модифицировать).
Для определения свойств таблицы перейдите на вкладку Table (Таблица).
В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit(), которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента.
В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 2.5) "Вы превысили допустимую сумму кредита клиента".
Рис. 2.5. Определение условия достоверности данных
Определим функцию CheckMaxCredit как свойство базы данных, поэтому создадим ее в виде хранимой процедуры.
Для создания хранимой процедуры CheckMaxCredit в окне редактирования хранимых процедур, которое содержит ранее созданные программы, введите следующий текст:
procedure CheckMaxCredit
nCdOrder=Ordsaled.icdOrder && номер текущего заказа
* вычисляем сумму всех введенных позиций заказа
SELECT SUM(Ordsaied.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