Shape COMPUTE 命令生成父 Recordset(其列由对子 Recordset 的引用组成)、可选的列(其内容是对子 Recordset 或以前成形的 Recordset 执行合计函数的结果)和在可选的 BY 子句中开列出的任何子 Recordset 的列。
语法
"SHAPE {child-command} [AS] child-alias
COMPUTE child-alias [ ,aggregate-command-field-list]
[BY grp-field-list]"
组成说明
该命令的组成是:
child-command 如下之一。
? | 在尖括号(“{}”)中的查询命令,返回 Recordset 对象。命令发布给基本数据提供者,其语法取决于该提供者的要求。虽然 ADO 并不要求使用任何指定的查询语言,但通常是使用结构化查询语言 (SQL)。 |
? | 以前成形的 Recordset 的名称。 |
? | 另一个形状(Shape)命令。 |
? | TABLE 关键字,后跟表的名称。 |
child-alias 别名,用于引用由 child-command 返回的 Recordset。在 COMPUTE 子句的列的列表中需要 child-alias,用于定义父和子 Recordset 对象的关系。
aggregate-command-field-list 列表,定义在生成的父中的列,含有对子 Recordset 执行合计函数所产生的值。
grp-field-list 在父和子 Recordset 对象中的列的列表,指定在子中的行如何分组。
对在 grp-field-list 中的每个列,在父和子 Recordset 对象中有对应的列。对父 Recordset 的每个行,grp-field-list 列有唯一的值,并且由父行引用的子 Recordset 由子行(其 grp-field-list 列含有与父行相同的值)单独组成。
如果 COMPUTE 子句包含合计函数,但没有 BY 子句,那么,只有一个父行含有整个子 Recordset 的合计值。如果有 BY 子句,那么,有多个父行均分别含有引用和子 Recordset 的合计值。
操作
child-command 被发布给提供者,并返回子 Recordset。
COMPUTE 子句指定父 Recordset 的列,该 Recordset 可以是对子 Recordset 的引用、一个或多个合计、计算表达式或新列。如果有 BY 子句,那么,它定义的列同时被追加到父 Recordset 中。BY 子句指定子 Recordset 的行分组的方式。
例如,假定有一个人口统计表,包括 State、City 和 Population 字段(人口数字单独说明)。
State |
City |
Population |
WA |
Seattle |
700,000 |
OR |
Medford |
200,000 |
OR |
Portland |
600,000 |
CA |
Los Angeles |
900,000 |
CA |
San Diego |
400,000 |
WA |
Tacoma |
500,000 |
OR |
Corvallis |
300,000 |
现在,发出该 Shape 命令:
rst.Open "SHAPE {select * from demographics} AS rs
COMPUTE SUM(rs.population), rs
BY state",
connection
该命令打开具有两个层次的成形 Recordset。父层是生成的 Recordset,有合计列 (SUM(rs.population))、引用子 Recordset (rs) 的列和分组 Recordset (州)的列。子层是由查询命令 (select * from demographics) 返回的 Recordset。
子 Recordset 具体行将由 State 分组,但不按照特定的顺序。即分组将不采用字母或数字顺序。
现在,您可以定位打开的父 Recordset,并访问具体的子 Recordset 对象。请参阅访问分级 Recordset 中的行。
所得到的父和子具体的 Recordsets
父
SUM (rs.Population) |
rs |
State |
1,300,000 |
Reference to child1 |
CA |
1,200,000 |
Reference to child2 |
WA |
1,100,000 |
Reference to child3 |
OR |
子 1
State |
City |
Population |
CA |
Los Angeles |
900,000 |
CA |
San Diego |
400,000 |
子 2
State |
City |
Population |
WA |
Seattle |
700,000 |
WA |
Tacoma |
500,000 |
子 3
State |
City |
Population |
OR |
Medford |
200,000 |
OR |
Portland |
600,000 |
OR |
Corvallis |
300,000 |