Реляционные СУБД в Visual FoxPro 8

         

Определение значения поля при добавлении новой записи



Определение значения поля при добавлении новой записи

Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.

  1. Откройте окно проекта sales.
  2. Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.
  3. Выберите в окне проекта таблицу Customer и нажмите кнопку Modify (Модифицировать).
  4. Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).
  5. В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum( ) , введя Getautonewttum ("Customer ") (рис. 14.4).
  6. Нажмите кнопку ОК для закрытия конструктора таблицы.
  7. Теперь необходимо определить функцию 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



Содержание раздела