Show/Hide Toolbars

XSharp

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

用途

使用关键表达式、记录编号或数字表达式将父工作区链接到一个或多个子工作区。

语法

SET RELATION TO [<uRecID> INTO <xcAlias>] [, [TO] <uRecId> INTO <xcAlias>...] [ADDITIVE] [SCOPED]

参数

TO <uRecID>如果子工作区有控制命令,则执行 <xcAlias>->DBSeek(<uRecID>) 操作;否则,执行 <xcAlias>->DBGoTo(<uRecID>) 操作。 每次记录指针在父工作区移动时,该操作都会将子工作区定位到匹配的索引键值或记录编号。

 

INTO <xcAlias>子工作区的别名标识符。 如果指定的别名没有关联的开放数据库文件,则会出现运行时错误。

 

ADDITIVE指定将关系添加到工作区的现有关系中。 如果未指定,则在设置新关系之前会清除现有关系。

 

SCOPED使 SET RELATION 命令映射到 OrdSetRelation() 命令。 如果未指定,SET RELATION 会映射到 DBSetRelation()。

 

SET RELATION TO 不带参数,清除当前工作区中定义的所有关系。

描述

每个父工作区最多可连接八个子工作区。

 

关联工作区可使子工作区与父工作区同步。 每当父工作区移动到一个新记录时,子工作区就会自动重新定位。

 

使用表达式和别名列表指定 SET RELATION TO 时,其功能等同于使用多个 DBSetRelation()(或 OrdSetRelation(),如果指定了 SCOPED)函数调用。 如果没有指定 ADDITIVE 子句,命令将首先调用 DBClearRelation()。

备注

软查找:  作为关系定位的一部分进行的寻道操作绝不是软寻道(它们不遵守 SetSoftSeek() 标记)。 如果关系移动不成功,子工作区将定位到 LastRec() + 1,其 Found() 状态返回 FALSE,其 EoF() 状态返回 TRUE。

 

循环关系:  不要直接或间接将父工作区与自身相关联。

 

记录编号关系:  要根据匹配的记录编号关联两个工作区,请在 SET RELATION TO 表达式中使用 RecNo(),并确保子工作区没有活动索引。

示例

此示例在多父子配置中关联了三个工作区,其中 CUSTOMER 同时与 INVOICES 和 ZIP 相关:

USE invoices INDEX invoices NEW
USE zip INDEX zipcode NEW
USE customer NEW
SET RELATION TO CustNum INTO Invoices, Zipcode INTO Zip
LIST Customer, Zip->City, Invoices->Number, Invoices->Amount

之后,您可以使用 ADDITIVE 子句添加一个新的子关系,就像这样:

USE backorder INDEX backorder NEW
SELECT customer
SET RELATION TO CustNum INTO Backorder ADDITIVE

程序集

XSharp.RT.DLL

参见

DbGoTo(), DBRelation(), DBRSelect(),, DbSeek(), DbSetIndex(), DbSetOrder() , DBSetRelation(), Found(), OrdSetRelation(), RecNo(), SET INDEX, SET ORDER, SetSoftSeek()