Определение значения поля при добавлении новой записи
Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.
Откройте окно проекта sales.
Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.
Выберите в окне проекта таблицу Customer и нажмите кнопку Modify (Модифицировать).
Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).
В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum( ) , введя Getautonewttum ("Customer ") (рис. 14.4).
Нажмите кнопку ОК для закрытия конструктора таблицы.
Теперь необходимо определить функцию GetAutoNewNum. Откройте окно редактирования хранимой процедуры и введите следующие команды:
FUNCTION GetAutoNewNum
LPARAMETERS CNameAliasGANN
LOCAL nDefaultValueGANN IF TYPE("cNameAliasGANN")="L"
= GetMessage ("Нужно ввести имя таблицы для определения начального
значения в таблице "+ALIAS()+"!",48,"Функция GetAutoNewNum")
RETURN 1
ENDIF
cNameAliasGANN=ALLTRIM(UPPER(cNameAliasGANN))
DO OpenTable WITH "SALES!RECORDS",1
IF !SEEK(cNameAliasGANN)
APPEND BLANK
REPLACE NameOfTable WITH cNameAliasGANN
REPLACE ColRecordsInTable WITH 1
ELSE
REPLACE ColRecordsInTable WITH ColRecordsInTable+1
ENDIF
nDefaultValueGANN=ColRecordsInTable
SELECT (cNameAliasGANN)
RETURN nDefaultValueGANN
Рис. 14.4. Задание вызова хранимой процедуры
Содержание раздела