GETFLDSTATE() 函 数
返回一个数值 标明表或临时表中的字段是否已被编辑 或是否有追加的记录 或者指明当前记录的删除状态是否已更改
语 法
GETFLDSTATE ( cFieldName | nFieldNumber [, cTableAlias | nWorkArea ])
返 值 类 型数值型 参 数 描 述
cFieldName | nFieldNumber
指 定 要 返 回 其 编 辑 状 态 的 字 段 的 名 称 或 编 号 字 段 编 号 nFieldNumber 对 应 于字 段 在 表 或 临 时 表 结 构 中 的 位 置 可 以 使 用 DISPLAY STRUCTURE 命 令 或FIELD() 函 数 确 定 字 段 的 编 号
指定 nFieldNumber 为 -1 可以返回一个字符串 该字符串包含表或临时表中所有字段的删除和编辑状态 例如 如果某个表有五个字段 而只编辑过第一个字段 则GETFLDSTATE() 函数将返回下列值
121111
第一个位置上的 1 表明删除状态尚未更改
也可以把 nFieldNumber 设置为 0 从而确定自表或临时表打开以来是否更改过当前记录的删除状态
注 意 GETFLDSTATE() 函 数 只 能 用 于 判 定 是 否 更 改 过 当 前 记 录 的 删 除 状 态 例
如 如 果 对 某 个 记 录 作 了 删 除 标 记 然 后 又 进 行 了 恢 复 操 作 即 使 此 时 该记 录 的 删 除 状 态 已 恢 复 为 原 始 状 态 GETFLDSTATE() 函 数 仍 将 指 示 删 除状 态 已 进 行 了 更 改 可 以 使 用 DELETED() 函 数 确 定 记 录 当 前 的 删 除 状态
cTableAlias
指 定 表 或 者 临 时 表 的 别 名 函 数 将 返 回 其 字 段 的 编 辑 状 态 或 记 录 的 删 除 状态
n W o rkArea
指定表或者临时表所在的工作区 函数将返回其字段的编辑状态或记录的删除状态
如 果 没 有 指 定 别 名 或 工 作 区 则 GETFLDSTATE() 函 数 返 回 当 前 选 定 表 或 者临 时 表 中 字 段 的 状 态 .
说 明
下表列出了返回值及其相应的编辑或删除状态
返 回 值 编 辑 或 删 除 状 态
-
字段未作编辑 或者删除状态未作更改
-
已编辑了字段
或者更改了删除状态 .
-
追加记录的字段未做编辑
或者追加记录的删除状态未做更改 .
-
已编辑了追加记录的字段
或者已更改了追加记录的删除状态
必须首先用 CURSORSETPROP() 函数启用行缓冲或表缓冲 才能使 GETFLDSTATE()
函数操作本地表
如果 GETFLDSTATE() 函数未带可选的参数 cTableAlias 或 nWorkArea 则返回当前选定工作区中打开的表或临时表的编辑或删除状态
示 例
下面的示例演示了如何利用 GETFLDSTATE() 函数判定字段的内容是否已进行了更改
为满足表缓冲的要求 将 MULTILOCKS 设置为 ON 打开 testdata 数据库 中的 customer
表 然后用 CURSORSETPROP() 函数 将缓冲方式设置为开放式表缓冲 (5)
在 cust_id 字段修改之前发出 GETFLDSTATE() 函数 显示与此字段的未修改状态相对应的值 (1) 用 REPLACE 命令修改 cust_id 字段后 再次发出 GETFLDSTATE() 函
数 显示与此字段的修改状态相对应的值 (2) 之后调用 TABLEREVERT() 函数使表 返回到原始状态 并且再次发出 GETFLDSTATE() 函数 显示与 cust_id 字段原始状态相对应的值 (1)
CLOSE DATABASES
CLEAR
SET MULTILOCKS ON && 允许表缓冲OPEN DATABASE (HOME(2) + 'data\testdata') USE Customer && 打开 customer 表
=CURSORSETPROP("Buffering",5,"customer") && 启用表缓冲
- 获取原始 cust_id 字段上的字段状态并显示状态
nState= GETFLDSTATE ("cust_id") DO DisplayState WITH nState
-
更改字段内容并显示状态REPLACE cust_id WITH "***" nState=
GETFLDSTATE ("cust_id") DO DisplayState WITH nState
-
放弃表的更改并显示状态
= TABLEREVERT(.T.) && 放弃所有的表更改
nState= GETFLDSTATE ("cust_id") DO DisplayState WITH nState
PROCEDURE DisplayState PARAMETER nState
DO CASE
CASE nState=1
=MESSAGEBOX("Field has not been modified",0,"Results") OTHERW ISE
=MESSAGEBOX("Field has been modified",0,"Results") ENDCASE
请 参 阅
CURVAL(), DELETED(), FIELD(), OLDVAL(), CURSORSETPROP(), SETFLDSTATE()