Show/Hide Toolbars

XSharp

Note该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。

用途

为当前记录中一个或多个字段的内容分配新值。

语法

REPLACE <idField> WITH <uValue> [, <idField> WITH <uValue>...] [<Scope>] [WHILE <lCondition>]
 [FOR <lCondition>]  [[IN|ALIAS] <workarea>]

参数

<idField>要赋值的字段变量名称。 如果 <idField> 前有别名或使用 FIELD <idField> IN <idAlias> 声明,赋值将在指定的工作区进行。 否则,将在当前工作区进行赋值。

 

WITH <uValue>定义分配给 <idField> 的值。

 

<Scope>当前数据库文件中要处理的部分。 默认为所有可见记录。范围可以是以下一个或多个子句:
[NEXT <NEXT>]        可选择指定从源文件第一条记录开始处理的记录数。这将从源文件的第一条记录开始。
[RECORD <rec>]        可选的记录 ID 如果指定,处理将从源文件中的该数据记录开始。
[<rest:REST>]                选项 REST 可指定是否从当前记录到最后一条记录按顺序搜索。如果指定了条件,则选项 ALL 为默认值。
[ALL]                选项 ALL 指定导入源文件中的所有记录。这是默认设置。
FOR <lCondition>处理范围内每条可见记录必须满足的条件。 如果某条记录不符合指定条件,则会被忽略,并处理下一条可见记录。 如果没有指定 <Scope> 或 WHILE 子句,则 for 条件会将默认范围改为所有可见记录。

 

WHILE <lCondition>范围内每条可见记录都必须满足的条件,从当前记录开始。 一旦 while 条件失败,进程就会终止。 如果没有指定 <Scope>,while 条件会将默认范围改为文件中的其他可见记录。

 

IN | ALIAS <workarea>指定执行操作的工作区。

描述

REPLACE 与赋值运算符(:=)的功能相同,只是它假设的是字段变量。

 

警告!  REPLACE 关键字段时,索引会被更新,索引中记录指针的相对位置也会改变。 这意味着用作用域或条件替换关键字段可能会产生错误的结果。 要更新关键字段,请在 REPLACE 之前抑制控制顺序(例如,使用 SET ORDER TO 0 或 DBSetOrder(0))。 这样可以确保记录指针按自然顺序依次移动,并正确更新顺序列表中的所有顺序。

 

共享模式: 对于共享数据库,该命令需要锁定其操作的所有记录。 可以使用一个或多个记录锁或文件锁来实现这一要求,具体取决于命令的范围。

示例

本例展示了 REPLACE 的简单用法:

USE customer NEW
APPEND BLANK
USE invoices NEW
APPEND BLANK
 
REPLACE Charges WITH Customer->Markup * Cost,;
 CustID WITH Customer->CustID,;
 Customer->TranDate WITH TODAY()

使用赋值语句代替 REPLACE 命令的情况如下:

Invoices->Charges := Customer->Markup * ;
 Invoices->Cost
Invoices->CustID := Customer->CustID
Customer->TranDate := TODAY()

程序集

XSharp.RT.DLL

参见

COMMIT, DbRLock(), DbSetOrder(), FLock(), RLock(), SET ORDER