T A B L E U P D A T E 函 数
执行对缓冲行 缓冲表或临时表的修改
语 法
TABLEUPDATE [ nRows [, lForce ]] [, cTableAlias | nWorkArea ] [,
cErrorArra y]
返 值 类 型
逻辑型
参 数 描 述
nRows
确 定 实 施 对 表 或 临 时 表 的 哪 些 更 改 如 果 nRows 是 0 或 . F . 并 且 启 用行 或 表 缓 冲 那 么 只 实 施 对 表 或 临 时 表 中 当 前 记 录 的 更 改
如 果 nRows 是 1 并 且 启 用 表 缓 冲 那 么 实 施 对 表 或 临 时 表 中 所 有 记 录 所 做的 更 改 如 果 nRows 是 1 或 . T . 并 且 启 用 行 缓 冲 那 么 只 实 施 对 表 或临 时 表 中 当 前 记 录 所 做 的 更 改
如 果 nRows 是 2 则 对 表 或 临 时 表 实 施 的 更 改 方 式 与 nRows 是 1 的 情 况 相同 但 是 当 不 能 实 施 一 处 更 改 时 不 产 生 一 个 错 误 并 且 V isual FoxPro 继续 处 理 表 或 临 时 表 中 的 其 他 记 录 如 果 包 含 了 cErrorArray 则 当 产 生 一 个 错误 时 创 建 一 个 包 含 错 误 信 息 的 数 组
nRows 的 默 认 值 是 0
lForce
决 定 是 否 覆 盖 网 络 上 的 其 他 用 户 对 表 或 临 时 表 的 修 改 如 果 lForce 是 真
.T . 那 么 网 络 上 其 他 用 户 表 或 临 时 表 的 任 何 更 改 都 被 覆 盖
如 果 lForce 是 假 .F. V isual FoxPro 从 表 或 临 时 表 的 第 一 个 记 录 开始 对 记 录 逐 条 实 施 更 改 直 到 表 或 临 时 表 的 结 束 如 果 遇 到 某 个 记 录 被 网络 上 别 的 用 户 修 改 过 V isual FoxPro 将 产 生 错 误
当 V isual FoxPro 产 生 该 错 误 时 可 以 用 ON ERROR 例 程 来 处 理 O N ERROR 例 程 调 用 TABLEUPDATE 函 数 并 把 lForce 设 置 成 真
.T . 从 而 实 施 对 记 录 的 更 改 或 者 如 果 正 处 理 一 个 事 务 那 么 O N
ERROR 例 程 可 以 处 理 发 生 的 错 误 并 且 调 用 ROLLBACK 命 令 把 表 或 临时 表 恢 复 成 原 来 的 状 态
lForce 的 默 认 值 是 假 .F.
cTableAlias
指 定 要 实 施 更 改 的 表 或 临 时 表 的 别 名 如 果 包 含 了 表 或 临 时 表 的 别 名 也 必须 包 含 lForce 参 数
n W orkArea
指 定 要 实 施 更 改 的 表 或 临 时 表 所 在 的 工 作 区
cErrorArray
指 定 当 nRows 是 2 并 且 不 能 实 施 对 一 个 记 录 的 更 改 时 所 创 建 的 数 组 该数 组 只 包 含 一 列 其 中 包 含 不 能 实 施 更 改 的 记 录 的 编 号 如 果 包 含 了 一 个 数组 名 也 必 须 包 含 表 或 临 时 表 的 别 名 cTableAlias 或 工 作 区 编 号n W o rkArea
注 意 如 果 在 更 新 记 录 时 发 生 了 一 个 非 简 单 的 提 交 错 误 时 cErrorArray 的 第 一个 元 素 将 包 含 – 1 还 可 以 运 用 AERROR 函 数 判 断 更 新 不 被 认 可 的 原因
说 明
如果实施了对所有记录所做的更改 则 TABLEUPDATE 函数返回 真 .T.
否则 TABLEUPDATE 函数返回 假 .F. 记录指针指向不能实施更改的记录 可以发出 AERROR 函数确定对此记录所做更改不能实施的原因
对于没有启用行缓冲的表或没有启用表缓冲的临时表 TABLEUPDATE 函数不能实施对它们的更改 如果在没有启用行或表缓冲的情况下 调用 TABLEUPDATE
函数 Visual FoxPro 将产生错误信息 然而 TABLEUPDATE 函数仍然可以对具有有效性规则的表或临时表实施更改 使用函数 CURSORSETPROP 可以启用或废止行或表缓冲
如果不带可选参数 cTableAlias 或 nWorkArea 调用 TABLEUPDATE 函数 那么只对当前所选工作区中打开的表或临时表实施更改
如果使用了表缓冲 并且更新了多个记录 则 TABLEUPDATE 将记录指针移动到更新的最后一个记录
注 意 对 于 不 使 用 关 键 字 段 的 本 地 表 或 视 图 调 用 TABLEUPDATE 会 产
生 一 个 长 W H E R E 子 句 以 查 找 更 新 的 行 W H E R E 子 句 中 支 持 的 字段 默 认 数 是 40 如 果 得 到 错 误 1812 - SQL 语 句 太 长 可 以 为 更 新 使用 关 键 字 段 或 者 用 SYS 3055 来 增 加 W H E R E 子 句 的 复 杂 程 度如 果 使 用 SYS 3055 其 值 增 加 到 表 中 字 段 数 量 的 8 倍
= SYS 3055, 8 * MIN 40, FCOUNT
示 例
下面的示例演示了如何用 TABLEUPDATE 提交对缓冲表所做的更改 创建表
employees 然后用 INSERT SQL 在 cLastName 字段中插入值 “ Smith ”
作为对表缓冲的要求 MULTILOCKS 应设置为 ON 用 CURSORSETPROP 将缓冲模式设置成最佳表缓冲 5
显 示 cLastName 字段 Smith 的最初值 然后用 REPLACE 修改它 显示cLastName 字段的新值 Jones 用 TABLEUPDATE 提交更改到表中 用TABLEREVERT 代替了放弃更改 显示 cLastName 字段更新后的 值
Jones
CLOSE DATABASES
CREATE TABLE employee cLastName C 10 SET MULTILOCKS ON && 表缓冲必须为 ON
= CURSORSETPROP 'Buffering', 5, 'employee' && 激活表缓冲
INSERT INTO employee cLastName VALUES 'Smith'
CLEAR
? 'Original cLastName value: '
?? cLastName && 显示 cLastName 当前值 Smith
REPLACE cLastName WITH 'Jones'
? 'New cLastName value: '
?? cLastName && 显示 cLastName 新值 Jones
= TABLEUPDATE .T. && 接受更新
? 'Updated cLastName value: '
?? cLastName && 显示 cLastName 当前值 Jones
请 参 阅
CURSORSETPROP , CURVAL , O L D V A L , TABLEREVERT