Возвращает числовое значение, показывающее, редактировалось ли поле в таблице или курсоре, добавлялись ли записи, изменился ли для текущей записи статус удаления.
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.
Copy 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
| |
Example 2
The following example shows the difference in behavior between fields with and without default values.
Copy 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.
| |