Note | 该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。 |
根据指定条件,合并两个工作区中的选定记录和字段,创建新的数据库文件。
JOIN WITH <xcAlias> TO <xcTargetFile> FOR <lCondition> [FIELDS <idFieldList>]
WITH <xcAlias> | 要与当前工作区合并的工作区的别名标识符。 如果没有与 <xcAlias> 关联的开放数据库,则会出现运行时错误。 |
TO <xcTargetFile> | 目标数据库文件的名称,包括可选的驱动器、目录和扩展名。 有关文件搜索和创建规则,请参阅 SetDefault() 和 SetPath()。 数据库文件的默认扩展名由 RDD .NET 文件决定。 |
如果 <xcTargetFile> 不存在,将创建该文件。 如果存在,该命令将尝试以独占模式打开文件,如果成功,文件将被覆盖,不会发出警告或出错。 如果由于其他进程正在使用该文件等原因而拒绝访问,NetErr() 将被设置为 TRUE。 |
FOR <lCondition> | 使用 WITH 工作区中的每条可见记录对当前工作区中的每条可见记录进行处理的条件。 如果记录符合条件,新记录将被写入 <xcTargetFile>。 如果记录不符合指定条件,则忽略该记录并处理下一条记录。 |
警告 处理的记录数将是主工作区的 LastRec() 乘以次工作区的 LastRec()。 例如,如果有两个数据库文件,每个文件有 100 条记录,那么 JOIN 处理的记录数相当于顺序处理一个有 10,000 条记录的数据库文件。 因此,请谨慎使用该命令。 |
FIELDS <idFieldList> | 将两个工作区中的字段投影到新数据库文件中。 要指定次要工作区中的字段,请使用别名操作符 (->) 引用它们。 如果未指定 FIELDS 子句,则当前工作区中的所有字段都将包含在目标数据库文件中。 |
已删除记录: 如果 SetDeleted() 为 FALSE,则会处理两个源文件中已删除的记录,但其删除状态不会保留在 <xcTargetFile> 中;因此,目标文件中的记录不会被标记为删除,无论其在源文件中的删除状态如何。
可见性: 如果 SetDeleted() 为 "true",则(两个文件中的)已删除记录都不可见,因此不会被处理。 同样,被过滤(使用 DbSetFilter() 或条件控制命令)的记录也不会被处理。
此示例将 CUSTOMER.DBF 与 INVOICES.DBF 相结合,生成 PURCHASES.DBF:
USE invoices NEW
USE customer NEW
JOIN WITH Invoices TO purchases;
FOR Last = Invoices->Last;
FIELDS First, Last, Invoices->Number, ;
Invoices->Amount
XSharp.RT.DLL
DbJoin(), SET RELATION, SetDefault(), SetPath()