Функция OLDVAL()

Возвращает первоначальное значение поля, которое было модифицировано, но не обновлялось.

Синтаксис:

OLDVAL(cExpression [, cTableAlias | nWorkArea])

Параметры:
cExpression
Задает выражение, для которого функция OLDVAL( ) возвращает первоначальное значение из таблицы или удаленного источника данных. В качестве cExpression обычно используется поле или выражение, состоящее из набора полей таблицы или удаленного источника данных.
cTableAlias
Задает псевдоним таблицы или курсора, из которого возвращаются первоначальные значения поля.
nWorkArea
Задает рабочую область таблицы или курсора, из которого возвращаются первоначальные значения поля.

Результат:
Типа Character, Currency, Date, DateTime, Double, Float, Integer, Logical, Numeric или Memo.

Комментарии:
Функция OLDVAL( ) возвращает первоначальные значения полей для записей таблицы или курсора Visual FoxPro, в которых с помощью функции CURSORSETPROP( ) включена буферизация строк или таблиц.
Если для таблицы базы данных или для курсора предусмотрены правила, то для получения первоначальных значений полей с помощью функции OLDVAL( ) не обязательна поддержка буферизации строк или таблиц.
Если указатель записи при включенной буферизации строк перемещается к другой записи, если выдана функция TABLEUPDATE( ) для фиксации изменений в записи или если выполняется какое-либо иное действие, вызывающее обновление (например завершение транзакции), то поля обновляются и их первоначальные значения теряются.
Тип данных для значения, возвращаемого функцией OLDVAL( ), определяется содержимым выражения, заданного cExpression.
Если функция OLDVAL( ) выдана без аргумента cTableAlias или nWorkArea, возвращаются первоначальные значения поля для таблицы или курсора, открытых в выбранной в данный момент рабочей области.

Пример:

* Следующий пример демонстрирует, как с помощью функции OLDVAL( )
* можно восстановить первоначальное значение поля в буферизованной
* таблице. Создается таблица employees, и команда INSERT - SQL
* вставляет значение "Smith" в поле cLastName.
* Значение MULTILOCKS устанавливается равным ON; это необходимо в
* случае буферизации таблицы. Функция CURSORSETPROP( )
* устанавливает в качестве режима буферизации мягкую буферизацию
* таблицы (5).
* На экран выводится первоначальное значение поля cLastName (Smith), а
* затем поле cLastName модифицируется по команде REPLACE. На экране
* отображается новое значение этого поля (Jones). Первоначальное
* значение поля cLastName (Smith) отображается с помощью функции
* OLDVAL( ). Затем функция TABLEUPDATE( ) фиксирует изменения,
* внесенные в таблицу. После этого на экран выдается обновленное
* значение поля cLastName (Jones).

CLOSE DATABASES
CREATE TABLE employee (cLastName C(10))
APPEND BLANK
INSERT INTO employee (cLastName) VALUES ('Smith')
SET MULTILOCKS ON  && Must be on for table buffering
= CURSORSETPROP('Buffering', 5, 'employee' )  && Enable table buffering


CLEAR
? 'Original cLastName value: '
?? cLastName  && Displays current cLastName value (Smith)

REPLACE cLastName WITH 'Jones'
? 'New cLastName value: '
?? cLastName  && Displays new cLastName value (Jones)
? 'cLastName value returned by OLDVAL( ): '
?? OLDVAL('cLastName', 'employee') && Original cLastName value (Smith)

= TABLEUPDATE(.T.)
? 'Updated cLastName value: '
?? cLastName  && Displays current cLastName value (Jones)

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.