tableupdate( ) 函数

示例 请参阅

执行对缓冲行、缓冲表或临时表的修改。

语法

TABLEUPDATE([nRows [, lForce]] [, cTableAlias | nWorkArea]
[, cErrorArray])

返值类型

逻辑型

参数

nRows

确定实施对表或临时表的哪些更改。

如果 nRows 是 0(或 .F.),并且启用行或表缓冲,那么只实施对表或临时表中当前记录的更改。

如果 nRows 是 1,并且启用表缓冲,那么实施对表或临时表中所有记录所做的更改。如果 nRows 是 1(或 .T.),并且启用行缓冲,那么只实施对表或临时表中当前记录所做的更改。如果 nRows 是 2,则对表或临时表实施的更改方式与 nRows 是 1 的情况相同。但是,当不能实施一处更改时,不产生一个错误,并且 Visual FoxPro 继续处理表或临时表中的其他记录。如果包含了 cErrorArray,则当产生一个错误时,创建一个包含错误信息的数组。

nRows 的默认值是 0。

lForce

决定是否覆盖网络上的其他用户对表或临时表的修改。

如果 lForce 是“真”(.T.),那么网络上其他用户表或临时表的任何更改都被覆盖。如果 lForce 是“假”(.F.),Visual FoxPro 从表或临时表的第一个记录开始,对记录逐条实施更改,直到表或临时表的结束。如果遇到某个记录被网络上别的用户修改过,Visual FoxPro 将产生错误。

当 Visual FoxPro 产生该错误时,可以用 ON ERROR 例程来处理。ONERROR 例程调用 TABLEUPDATE()函数,并把 lForce 设置成“真”(.T.),从而实施对记录的更改。或者,如果正处理一个事务,那么 ONERROR 例程可以处理发生的错误,并且调用 ROLLBACK 命令,把表或临时表恢复成原来的状态。

lForce 的默认值是“假”(.F.)。

cTableAlias

指定要实施更改的表或临时表的别名。如果包含了表或临时表的别名,也必须包含 lForce 参数。

nWorkArea

指定要实施更改的表或临时表所在的工作区。

cErrorArray

指定当 nRows 是 2,并且不能实施对一个记录的更改时,所创建的数组。该数组只包含一列,其中包含不能实施更改的记录的编号。如果包含了一个数组名,也必须包含表或临时表的别名 cTableAlias或工作区编号nWorkArea。

注意 如果在更新记录时发生了一个非简单的提交错误时, cErrorArray 的第一个元素将包含-1,还可以运用AERROR()函数判断更新不被认可的原因。

附注

如果实施了对所有记录所做的更改,则 TABLEUPDATE()函数返回“真”(.T.);否则,TABLEUPDATE()函数返回“假”(.F.),记录指针指向不能实施更改的记录。可以发出 AERROR()函数确定对此记录所做更改不能实施的原因。

对于没有启用行缓冲的表或没有启用表缓冲的临时表,TABLEUPDATE()函数不能实施对它们的更改。如果在没有启用行或表缓冲的情况下,调用 TABLEUPDATE()函数,Visual FoxPro 将产生错误信息。然而,TABLEUPDATE()函数仍然可以对具有有效性规则的表或临时表实施更改。使用函数 CURSORSETPROP()可以启用或废止行或表缓冲。

如果不带可选参数 cTableAlias 或 nWorkArea 调用 TABLEUPDATE()函数,那么只对当前所选工作区中打开的表或临时表实施更改。

如果使用了表缓冲,并且更新了多个记录,则 TABLEUPDATE()将记录指针移动到更新的最后一个记录。

注意 对于不使用关键字段的本地表或视图,调用 TABLEUPDATE()会产生一个长 WHERE 子句,以查找更新的行。WHERE 子句中支持的字段默认数是 40。如果得到1812 - SQL: 语句太长,可以为更新使用关键字段,或者用 SYS(3055) 来增加 WHERE 子句的复杂程度。如果使用 SYS(3055),其值增加到表中字段数量的8倍。

= SYS(3055, 8 * MIN(40, FCOUNT( ))