SET RELATION TO
[eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias]
[ADDITIVE]]
参数
eExpression1
指定用来在父表和子表之间建立关系的关系表达式。关系表达式通常是子表主控索引的索引表达式。
子表的索引可以是单项索引 (.IDX)、多项结构复合索引 (.CDX) 或独立复合索引。如果是复合索引,应指定适当的索引标识来排序子表。SET ORDER 可用来指定排序子表的索引标识。
例如,考虑“说明”部分描述的 customer 和 orders 两表。假定子表 orders 已经建立索引,并且使用如下命令用顾客编号进行排序:
SET ORDER TO TAG cust_id
要在 customer 和 orders 两表的顾客编号上建立关系,应选择包含父表 customer 的工作区或使用 IN 子句来指定父表的工作区或别名。然后,发出 set relation 命令,用如下关系表达式指定索引表达式:
SET RELATION TO cust_id INTO orders
除非关系表达式是数值型的,否则子表必须建立索引。如果发出包含非数值关系表达式的 set relation 命令时,子表没有使用索引进行排序, Visual FoxPro 显示错误信息。
如果 eExpression1 是数值型表达式,那么当记录指针在父表中移动时,将计算此表达式。然后,子表的记录指针移到记录编号为 eExpression1 的记录上。
INTO nWorkArea1 | cTableAlias1
指定子表的工作区编号 (nWorkArea1) 或子表的表别名 (cTableAlias1)。
eExpression2 INTO nWorkArea2 | cTableAlias2 ...
指定其他关系表达式 (eExpression2) 和子表,建立另一个父表和子表之间的关系。在一条 set relation 命令中可以创建单个父表与多个子表之间的关系,但是各个关系之间要用逗号隔开。
nWorkArea2 指定工作区编号,cTableAlias2 指定子表的别名。
IN nWorkArea
指定父表的工作区。
IN cTableAlias
指定父表的别名。
IN 子句允许创建关系时不必首先选择父表工作区。如果 set relation 命令中省略了 nWorkArea 和 cTableAlias,父表必须在当前选定的工作区中打开。
ADDITIVE
保留当前工作区中所有已存在的关系并创建指定的新关系。如果命令中不包括 ADDITIVE 子句,将断开当前工作区中的所有关系,然后再创建指定的关系。