FoxPro8

         

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


Рассмотрим следующий пример. Чтобы создать для таблицы 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. Задание вызова хранимой процедуры



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