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

OLDVAL(cExpression [, cTableAlias | nWorkArea])

Параметры

cExpression

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

cTableAlias

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

nWorkArea

Задает рабочую область таблицы или курсора, из которого возвращаются первоначальные значения поля.

Expand imageВозвращаемое значение

Character, Currency, Date, DateTime, Double, Float, Integer, Logical, Numeric, или Memo

Expand imageЗамечания

Функция OLDVAL( ) возвращает первоначальные значения полей для записей таблицы или курсора Visual FoxPro, в которых с помощью функции CURSORSETPROP( ) включена буферизация строк или таблиц.

Если для таблицы базы данных или для курсора предусмотрены правила, то для получения первоначальных значений полей с помощью функции OLDVAL( ) не обязательна поддержка буферизации строк или таблиц.

Если указатель записи при включенной буферизации строк перемещается к другой записи, если выдана функция TABLEUPDATE( ) для фиксации изменений в записи или если выполняется какое-либо иное действие, вызывающее обновление (например завершение транзакции), то поля обновляются и их первоначальные значения теряются.

Тип данных для значения, возвращаемого функцией OLDVAL( ), определяется содержимым выражения, заданного cExpression.

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

Expand imageПример

Следующий пример демонстрирует, как с помощью функции OLDVAL( ) можно восстановить первоначальное значение поля в буферизованной таблице. Создается таблица employees, команда INSERT – SQL помещает значение "Smith" в поле cLastName.

MULTILOCKS устанавливается в ON, это необходимо в случае буферизации таблицы. Функция CURSORSETPROP( ) устанавливает в качестве режима буферизации мягкую буферизацию таблицы (5).

На экран выводится первоначальное значение поля cLastName (Smith), затем поле cLastName модифицируется по команде REPLACE. На экране отображается новое значение поля cLastName (Jones). Первоначальное значение поля cLastName (Smith) отображается с помощью функции OLDVAL( ). Затем функция TABLEUPDATE( ) фиксирует изменения, внесенные в таблицу. После этого на экран выдается обновленное значение поля cLastName (Jones).

  CopyCode imageСкопировать код
CLOSE DATABASES
CLEAR

* Create new table and add blank record
CREATE TABLE employee (cLastName C(10)) 
APPEND BLANK

* Insert initial value
INSERT INTO employee (cLastName) VALUES ("Smith")

* Enable and set table buffering
SET MULTILOCKS ON  && Allow table buffering
=CURSORSETPROP("Buffering", 5, "employee" )  && Enable table buffering

* Display initial value
=MESSAGEBOX("Original cLastName value: "+ cLastName, 0, "Results")

* Change record value and display results
REPLACE cLastName WITH "Jones"
=MESSAGEBOX("Modified cLastName value: "+ cLastName, 0, "Results")

* Store the old value of the field to cTemp variable and display results
cTemp=OLDVAL("cLastName", "employee")
=MESSAGEBOX("Original cLastName value: "+ cTemp, 0, "Results")

* Update table and display final value
=TABLEUPDATE(.T.)
=MESSAGEBOX("Final cLastName value: "+ cLastName, 0, "Results")

* Close and delete example table file
USE
DELETE FILE employee.dbf

Expand imageСмотрите также