GETFLDSTATE() 函 数

GETFLDSTATE() 函 数 - 图1GETFLDSTATE() 函 数 - 图2GETFLDSTATE() 函 数 - 图3GETFLDSTATE() 函 数 - 图4返回一个数值 标明表或临时表中的字段是否已被编辑 或是否有追加的记录 或者指明当前记录的删除状态是否已更改

语 法

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

返 值 类 型数值型 参 数 描 述

cFieldName | nFieldNumber

GETFLDSTATE() 函 数 - 图5GETFLDSTATE() 函 数 - 图6GETFLDSTATE() 函 数 - 图7指 定 要 返 回 其 编 辑 状 态 的 字 段 的 名 称 或 编 号 字 段 编 号 nFieldNumber 对 应 于字 段 在 表 或 临 时 表 结 构 中 的 位 置 可 以 使 用 DISPLAY STRUCTURE 命 令 或FIELD() 函 数 确 定 字 段 的 编 号

GETFLDSTATE() 函 数 - 图8GETFLDSTATE() 函 数 - 图9GETFLDSTATE() 函 数 - 图10GETFLDSTATE() 函 数 - 图11GETFLDSTATE() 函 数 - 图12GETFLDSTATE() 函 数 - 图13指定 nFieldNumber 为 -1 可以返回一个字符串 该字符串包含表或临时表中所有字段的删除和编辑状态 例如 如果某个表有五个字段 而只编辑过第一个字段 则GETFLDSTATE() 函数将返回下列值

121111

GETFLDSTATE() 函 数 - 图14第一个位置上的 1 表明删除状态尚未更改

GETFLDSTATE() 函 数 - 图15GETFLDSTATE() 函 数 - 图16也可以把 nFieldNumber 设置为 0 从而确定自表或临时表打开以来是否更改过当前记录的删除状态

GETFLDSTATE() 函 数 - 图17注 意 GETFLDSTATE() 函 数 只 能 用 于 判 定 是 否 更 改 过 当 前 记 录 的 删 除 状 态 例

GETFLDSTATE() 函 数 - 图18GETFLDSTATE() 函 数 - 图19GETFLDSTATE() 函 数 - 图20GETFLDSTATE() 函 数 - 图21GETFLDSTATE() 函 数 - 图22GETFLDSTATE() 函 数 - 图23如 如 果 对 某 个 记 录 作 了 删 除 标 记 然 后 又 进 行 了 恢 复 操 作 即 使 此 时 该记 录 的 删 除 状 态 已 恢 复 为 原 始 状 态 GETFLDSTATE() 函 数 仍 将 指 示 删 除状 态 已 进 行 了 更 改 可 以 使 用 DELETED() 函 数 确 定 记 录 当 前 的 删 除 状态

cTableAlias

GETFLDSTATE() 函 数 - 图24GETFLDSTATE() 函 数 - 图25指 定 表 或 者 临 时 表 的 别 名 函 数 将 返 回 其 字 段 的 编 辑 状 态 或 记 录 的 删 除 状态

n W o rkArea

GETFLDSTATE() 函 数 - 图26GETFLDSTATE() 函 数 - 图27指定表或者临时表所在的工作区 函数将返回其字段的编辑状态或记录的删除状态

GETFLDSTATE() 函 数 - 图28GETFLDSTATE() 函 数 - 图29如 果 没 有 指 定 别 名 或 工 作 区 则 GETFLDSTATE() 函 数 返 回 当 前 选 定 表 或 者临 时 表 中 字 段 的 状 态 .

说 明

GETFLDSTATE() 函 数 - 图30下表列出了返回值及其相应的编辑或删除状态

返 回 值 编 辑 或 删 除 状 态

  1. 字段未作编辑 或者删除状态未作更改

  2. GETFLDSTATE() 函 数 - 图31GETFLDSTATE() 函 数 - 图32GETFLDSTATE() 函 数 - 图33GETFLDSTATE() 函 数 - 图34已编辑了字段

    或者更改了删除状态 .

  3. GETFLDSTATE() 函 数 - 图35GETFLDSTATE() 函 数 - 图36追加记录的字段未做编辑

    或者追加记录的删除状态未做更改 .

  4. GETFLDSTATE() 函 数 - 图37GETFLDSTATE() 函 数 - 图38已编辑了追加记录的字段

    或者已更改了追加记录的删除状态

GETFLDSTATE() 函 数 - 图39必须首先用 CURSORSETPROP() 函数启用行缓冲或表缓冲 才能使 GETFLDSTATE()

GETFLDSTATE() 函 数 - 图40函数操作本地表

GETFLDSTATE() 函 数 - 图41GETFLDSTATE() 函 数 - 图42如果 GETFLDSTATE() 函数未带可选的参数 cTableAliasnWorkArea 则返回当前选定工作区中打开的表或临时表的编辑或删除状态

示 例

GETFLDSTATE() 函 数 - 图43下面的示例演示了如何利用 GETFLDSTATE() 函数判定字段的内容是否已进行了更改

GETFLDSTATE() 函 数 - 图44GETFLDSTATE() 函 数 - 图45为满足表缓冲的要求 将 MULTILOCKS 设置为 ON 打开 testdata 数据库 中的 customer

GETFLDSTATE() 函 数 - 图46GETFLDSTATE() 函 数 - 图47表 然后用 CURSORSETPROP() 函数 将缓冲方式设置为开放式表缓冲 (5)

GETFLDSTATE() 函 数 - 图48GETFLDSTATE() 函 数 - 图49GETFLDSTATE() 函 数 - 图50在 cust_id 字段修改之前发出 GETFLDSTATE() 函数 显示与此字段的未修改状态相对应的值 (1) 用 REPLACE 命令修改 cust_id 字段后 再次发出 GETFLDSTATE() 函

GETFLDSTATE() 函 数 - 图51GETFLDSTATE() 函 数 - 图52GETFLDSTATE() 函 数 - 图53GETFLDSTATE() 函 数 - 图54GETFLDSTATE() 函 数 - 图55数 显示与此字段的修改状态相对应的值 (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()