Note | 该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。 |
根据指定的键值,用另一个工作区的值替换当前工作区中的字段。
UPDATE FROM <xcAlias> ON <uKeyValue> [RANDOM]REPLACE <idField> WITH <uValue> [, <idField> WITH <uValue>...]
FROM <xcAlias> | 用于更新当前工作区记录的工作区别名标识符。 如果没有与指定别名相关联的开放数据库文件,则会出现运行时错误。 |
ON <uKeyValue> | 定义 FROM 工作区中匹配记录的表达式。 |
REPLACE <idField> | 用新值更新当前工作区中的一个字段。 |
WITH <uValue> | 用于更新当前字段的值。 您必须使用正确的别名引用 FROM 工作区中包含的任何字段。 |
RANDOM | 如果指定,则当前工作区必须按 <uKeyValue> 排序(使用索引顺序),但 FROM 工作区记录可以按任意顺序排列。 如果未指定,则当前工作区和 FROM 工作区都必须按 <uKeyValue> 排序(逻辑上或物理上)。 |
UPDATE 只能更新当前工作区中具有唯一键值的记录。 当一个键值有多个实例时,只能更新具有该键值的第一条记录。 然而,FROM 工作区可以有重复的键值。
UPDATE 在功能上等同于 DBUpdate()。
已删除记录: 如果 SetDeleted() 为 FALSE,则会同时处理两个文件中的已删除记录。 被更新文件中的记录保留其已删除状态,不受 FROM 文件中记录的删除状态影响。
可见性: 如果 SetDeleted() 为 TRUE,则删除的记录不可见,因此不会被处理。 同样,过滤记录(使用 DbSetFilter() 或条件控制命令)也不会被处理。
共享模式: 对于共享数据库,UPDATE 需要对当前数据库文件加锁。 FROM 数据库文件可以在任何模式下打开。
此示例用未清发票金额更新 CUSTOMER 数据库文件:
USE invoices NEW
USE customer INDEX customer NEW
UPDATE FROM Invoices ON Last;
REPLACE Owed WITH Owed + Invoices->Amount RANDOM
XSharp.RT.DLL
DBCreateIndex(), DBUpdate(), FLock(), INDEX, JOIN, REPLACE, SetUnique(), SORT, TOTAL