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

GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])

Параметры

cFieldName| nFieldNumber

Задает имя или номер поля, для которого будет возвращен статус редактирования. Номер поля nFieldNumber соответствует позиции поля в структуре таблицы или курсора. Для определения номера поля можно использовать команду DISPLAY STRUCTURE или функцию FIELD( ).

Можно задать -1 в качестве nFieldNumber , чтобы возвращалась символьная строка, состоящая из значений статуса удаления и редактирования для всех полей таблицы или курсора. Например, если в таблице пять полей и редактировалось только первое поле, функция GETFLDSTATE( ) возвратит следующее: 121111.

Значение 1 в первой позиции указывает, что статус удаления не изменился.

Можно также задать 0 в качестве nFieldNumber , чтобы определить, изменился ли статус удаления для текущей записи с тех пор, как была открыта таблица или курсор.

NoteЗамечание

Функция GETFLDSTATE( ) позволяет определить только то, изменился ли статус удаления для текущей записи. Например, если пометить запись для удаления и затем отменить удаление, GETFLDSTATE( ) укажет, что статус удаления изменился, несмотря на то, что он в итоге вернулся в первоначальное состояние. Определить текущий статус удаления записи можно с помощью функции DELETED( ).

cTableAlias

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

nWorkArea

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

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

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

Числовое, Символьное, или .NULL.

Expand imageПримечания

TВ следующей таблице перечислены возвращаемые значения и соответствующий статус редактирования или удаления.

Возвращаемое значение Статус редактирования или удаления

1

Поле не редактировалось или статус удаления не изменился.

2

Поле редактировалось или статус удаления изменился.

3

Поле в добавленной записи не редактировалось или статус удаления для присоединенной записи не изменился.

4

Поле в добавленной записи редактировалось или статус удаления для добавленной записи изменился.

.NULL.

по достижению EOF( )

Чтобы функция GETFLDSTATE( ) могла работать с локальными таблицами, предварительно нужно включить буферизацию строк или таблиц функцией CURSORSETPROP( ).

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

Любіе изменения в поле will cause GETFLDSTATE() to return a value showing that the field has been modified, whether the change is explicit or implicit. An example of an explicit modification would be including the field in a REPLACE or INSERT INTO command. An implicit modification occurs in a field that has a default value when any command is issued that adds a new record.

Expand imageПример 1

Следующий пример демонстрирует, как можно с помощью функции GETFLDSTATE( ) определить, было ли изменено содержимое поля. MULTILOCKS устанавливается равным ON; это необходимо в случае буферизации таблицы. Открывается таблица customer в базе данных testdata, а затем с помощью функции CURSORSETPROP( ) устанавливается мягкий режим буферизации таблицы (5).

Перед изменением поля cust_id выдается функция GETFLDSTATE( ) которая отображает значение (1), соответствующее немодифицированному состоянию поля. Затем поле cust_id модифицируется по команде REPLACE и вновь выдается функция GETFLDSTATE( ), отображая значение (2), соответствующее модифицированному состоянию поля cust_id. Функция TABLEREVERT( ) возвращает таблицу в исходное состояние, а затем опять выдается функция GETFLDSTATE( ), которая отображает значение (1), соответствующее первоначальному состоянию поля cust_id.

  CopyCode imageCopy Code
CLOSE DATABASES
CLEAR

SET MULTILOCKS ON         && Allow table buffering
OPEN DATABASE (HOME(2) + 'data\testdata')
USE Customer             && Open customer table
=CURSORSETPROP("Buffering",5,"customer")  && Enable table buffering

* Get field state on original cust_id field and display state
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState, "Original"

* Change field contents and display state
REPLACE cust_id    WITH "***"
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState, "After Replace"

* Discard table changes and display state
= TABLEREVERT(.T.)        && Discard all table changes
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState, "After Revert"

PROCEDURE DisplayState
PARAMETER nState,cOperation
DO CASE
   CASE nState=1
      =MESSAGEBOX("Field has not been modified",0,cOperation)
   OTHERWISE
      =MESSAGEBOX("Field has been modified",0,cOperation)
ENDCASE

Expand imageExample 2

The following example shows the difference in behavior between fields with and without default values.

  CopyCode imageCopy Code
SET MULTILOCKS ON
CREATE DATABASE example
CREATE TABLE customer (cust_id C(6),state C(2) DEFAULT "FL")
CLOSE TABLES
USE customer
=CURSORSETPROP("Buffering",5,"customer")

APPEND BLANK
?GETFLDSTATE("cust_id")     && Returns 3, field in an appended record has
                            && not been modified.

?GETFLDSTATE("state")    && Returns 4, field in an appended record has
                         && been modified.

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