Возвращает числовое значение, показывающее, редактировалось ли поле в таблице или курсоре, добавлялись ли записи, изменился ли для текущей записи статус удаления.
GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea]) |
Параметры
- cFieldName| nFieldNumber
-
Задает имя или номер поля, для которого будет возвращен статус редактирования. Номер поля nFieldNumber соответствует позиции поля в структуре таблицы или курсора. Для определения номера поля можно использовать команду DISPLAY STRUCTURE или функцию FIELD( ).
Можно задать -1 в качестве nFieldNumber , чтобы возвращалась символьная строка, состоящая из значений статуса удаления и редактирования для всех полей таблицы или курсора. Например, если в таблице пять полей и редактировалось только первое поле, функция GETFLDSTATE( ) возвратит следующее:
121111
.Значение 1 в первой позиции указывает, что статус удаления не изменился.
Можно также задать 0 в качестве nFieldNumber , чтобы определить, изменился ли статус удаления для текущей записи с тех пор, как была открыта таблица или курсор.
Замечание
Функция GETFLDSTATE( ) позволяет определить только то, изменился ли статус удаления для текущей записи. Например, если пометить запись для удаления и затем отменить удаление, GETFLDSTATE( ) укажет, что статус удаления изменился, несмотря на то, что он в итоге вернулся в первоначальное состояние. Определить текущий статус удаления записи можно с помощью функции DELETED( ).
- cTableAlias
-
Задает псевдоним таблицы или курсора, для которых будет возвращен статус редактирования поля или удаления записи.
- nWorkArea
-
Задает рабочую область таблицы или курсора, для которых будет возвращен статус редактирования поля или удаления записи.
Если ни псевдоним, ни рабочая область не заданы, GETFLDSTATE( ) возвращает значение статуса для поля в выбранной таблице или курсоре.
Возвращаемое значение
Числовое, Символьное, или .NULL.
Примечания
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.
Пример 1
Следующий пример демонстрирует, как можно с помощью функции GETFLDSTATE( ) определить, было ли изменено содержимое поля. MULTILOCKS устанавливается равным ON; это необходимо в случае буферизации таблицы. Открывается таблица customer
в базе данных testdata
, а затем с помощью функции CURSORSETPROP( ) устанавливается мягкий режим буферизации таблицы (5).
Перед изменением поля cust_id
выдается функция GETFLDSTATE( ) которая отображает значение (1), соответствующее немодифицированному состоянию поля. Затем поле cust_id
модифицируется по команде REPLACE и вновь выдается функция GETFLDSTATE( ), отображая значение (2), соответствующее модифицированному состоянию поля cust_id
. Функция TABLEREVERT( ) возвращает таблицу в исходное состояние, а затем опять выдается функция GETFLDSTATE( ), которая отображает значение (1), соответствующее первоначальному состоянию поля cust_id
.
![]() | |
---|---|
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 |
Example 2
The following example shows the difference in behavior between fields with and without default values.
![]() | |
---|---|
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. |