SHAPE是做子查询的操作,我把帮助贴上来给您看吧
Shape Append 命令
Shape APPEND 命令将子 Recordset 分配给父 Recordset 中 Field 对象的 Value 属性。
语法
SHAPE {parent-command} [[AS] parent-alias]
APPEND ({child-command} [AS] child-alias
RELATE parent-column TO child-column...) [[AS] chapter-alias] ...
组成说明
该命令的组成部分为:
parent-command, child-command 如下之一。
在尖括号(“{}”)中的查询命令,返回 Recordset 对象。命令发布给基本数据提供者,其语法取决于该提供者的要求。虽然 ADO 并不要求使用任何指定的查询语言,但通常是使用结构化查询语言 (SQL)。圆括号(“()”)是必需的关键字,它们将子集列追加到引用由查询命令返回的 Recordset 的父。
以前成形的 Recordset 的名称。
另一个 Shape 命令。
TABLE 关键字,后跟表的名称。
parent-column 由 parent-command 返回的 Recordset 中的列。
child-column 由 child-command 返回的 Recordset 中的列。
... “parent-column TO child-column”子句实际上是列表,并用逗号将每个定义关系分隔开。
chapter-alias 别名,对追加到父的列的引用。
parent-alias 别名,对父 Recordset 的引用。
child-alias 别名,对子 Recordset 的引用。
... 在 APPEND 关键字后面的子句实际上是列表(每个子句使用逗号分隔),定义被追加到父的另一个列。
操作
发出 parent-command 并返回父 Recordset。然后发出 child-command 并返回子 Recordset。
例如,parent-command 可以从客户表返回公司的客户 Recordset,而 child-command 从定货表返回所有客户的定单 Recordset。
一般,父和子 Recordset 对象必须各自拥有用于关联父和子的列。列在 RELATE 子句中命名,parent-column 在先,child-column 在后。在各自的 Recordset 中,列可以有不同名称,但必须引用相同信息以便指定有意义的关系。例如,Customers 和 Orders Recordsets 可以同时拥有 customerID 字段。
数据构形将子集列追加到父 Recordset。子集列中的值是对子 Recordset 中列的引用,子 Recordset 满足 RELATE 子句。即在给定父行中的 parent-column 与在子集子的所有行中的 child-column 具有相同的值。
当您访问在子集列中的引用时,ADO 将自动检索由引用表示的 Recordset。注意尽管已经检索了全部子 Recordset,但子集(chapter)仅表示行的子集。
如果追加的列没有 chapter-alias,则会自动生成其名称。列的 Field 对象将被追加到 Recordset 对象的 Fields 集合,其数据类型将是 adChapter。
有关定位分级 Recordset 的详细信息,请参阅访问分级 Recordset 中的行。
参数化命令
如果您正在处理大的子 Recordset(尤其是比父 Recordset 大),却只需要访问部分子子集,那么,使用参数化命令会更有效。
non-parameterized command(非参数化命令)同时检索整个父和子 Recordsets,并将子集列追加到父,然后为每个父行指定相关子子集的引用。
parameterized command(参数化命令)检索整个父 Recordset,但在访问子集列时仅检索子集 Recordset。这种检索策略的差别可以有益的性能好处。
例如,可以指定如下:
"SHAPE {SELECT * FROM customer}
APPEND ({SELECT * FROM orders WHERE cust_id = ?}
RELATE cust_id TO PARAMETER 0)"
父和子表通常拥有列名 cust_id。child-command 有占位符(即“?”),受 RELATE 子句引用(即“...PARAMETER 0”)。关系在于显性标识的 customer 表 parent-column(即 cust_id)和隐性标识的 orders 表 child-column(即 cust_id)之间,由占位符和“PARAMETER 0”指定。
注意 PARAMETER 子句仅属于 Shape 命令语法。与 ADO Parameter 属性和 Parameters 集合均无关联。
在执行 Shape 命令时,发生如下情形:
执行 parent-command,并返回 customer 表的父 Recordset。
子集列被追加到父 Recordset。
在访问父行的子集列时,customer.cust_id 列的值将替换 orders.cust_id 的占位符,并执行 child-command。
orders 表(在此,orders.cust_id 列的值与 customer.cust_id 列的值相匹配)的所有行被检索。
对检索到的子行(即子 Recordset 的 chapter)的引用被放置在父 Recordset 当前行的子集列。
当访问另一个行的子集列时,重复步骤 3-5。
用Shape命令建立一个分层的记录集:
Dim Conn
Dim Rs
Dim ChildRs
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = [your connectionstring]
Conn.Open
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.StayInSync = FALSE
Rs.Open "SHAPE {select distinct [class] from [thetable]} " & _
"APPEND ({select * from [thetable} " & _
"RELATE class TO class) AS classNum", conn
Set ChildRs = Server.CreateObject("ADODB.Recordset")
While Not Rs.Eof
Set ChildRs = rs("classNum").Value
Response.Write "<table>"
While Not ChildRs.Eof
Response.Write "<tr><td>" & ChildRs("Class") & "</td><td>" & ChildRs("Name") & "</td><td>" & ChildRs("Resume") & "</td><td>" & ChildRs(Regdate) & "</td></tr>"
ChildRs.MoveNext
Wend
Response.Write "</table>"
Rs.MoveNext
Wend
Shape Append 命令
Shape APPEND 命令将子 Recordset 分配给父 Recordset 中 Field 对象的 Value 属性。
语法
SHAPE {parent-command} [[AS] parent-alias]
APPEND ({child-command} [AS] child-alias
RELATE parent-column TO child-column...) [[AS] chapter-alias] ...
组成说明
该命令的组成部分为:
parent-command, child-command 如下之一。
在尖括号(“{}”)中的查询命令,返回 Recordset 对象。命令发布给基本数据提供者,其语法取决于该提供者的要求。虽然 ADO 并不要求使用任何指定的查询语言,但通常是使用结构化查询语言 (SQL)。圆括号(“()”)是必需的关键字,它们将子集列追加到引用由查询命令返回的 Recordset 的父。
以前成形的 Recordset 的名称。
另一个 Shape 命令。
TABLE 关键字,后跟表的名称。
parent-column 由 parent-command 返回的 Recordset 中的列。
child-column 由 child-command 返回的 Recordset 中的列。
... “parent-column TO child-column”子句实际上是列表,并用逗号将每个定义关系分隔开。
chapter-alias 别名,对追加到父的列的引用。
parent-alias 别名,对父 Recordset 的引用。
child-alias 别名,对子 Recordset 的引用。
... 在 APPEND 关键字后面的子句实际上是列表(每个子句使用逗号分隔),定义被追加到父的另一个列。
操作
发出 parent-command 并返回父 Recordset。然后发出 child-command 并返回子 Recordset。
例如,parent-command 可以从客户表返回公司的客户 Recordset,而 child-command 从定货表返回所有客户的定单 Recordset。
一般,父和子 Recordset 对象必须各自拥有用于关联父和子的列。列在 RELATE 子句中命名,parent-column 在先,child-column 在后。在各自的 Recordset 中,列可以有不同名称,但必须引用相同信息以便指定有意义的关系。例如,Customers 和 Orders Recordsets 可以同时拥有 customerID 字段。
数据构形将子集列追加到父 Recordset。子集列中的值是对子 Recordset 中列的引用,子 Recordset 满足 RELATE 子句。即在给定父行中的 parent-column 与在子集子的所有行中的 child-column 具有相同的值。
当您访问在子集列中的引用时,ADO 将自动检索由引用表示的 Recordset。注意尽管已经检索了全部子 Recordset,但子集(chapter)仅表示行的子集。
如果追加的列没有 chapter-alias,则会自动生成其名称。列的 Field 对象将被追加到 Recordset 对象的 Fields 集合,其数据类型将是 adChapter。
有关定位分级 Recordset 的详细信息,请参阅访问分级 Recordset 中的行。
参数化命令
如果您正在处理大的子 Recordset(尤其是比父 Recordset 大),却只需要访问部分子子集,那么,使用参数化命令会更有效。
non-parameterized command(非参数化命令)同时检索整个父和子 Recordsets,并将子集列追加到父,然后为每个父行指定相关子子集的引用。
parameterized command(参数化命令)检索整个父 Recordset,但在访问子集列时仅检索子集 Recordset。这种检索策略的差别可以有益的性能好处。
例如,可以指定如下:
"SHAPE {SELECT * FROM customer}
APPEND ({SELECT * FROM orders WHERE cust_id = ?}
RELATE cust_id TO PARAMETER 0)"
父和子表通常拥有列名 cust_id。child-command 有占位符(即“?”),受 RELATE 子句引用(即“...PARAMETER 0”)。关系在于显性标识的 customer 表 parent-column(即 cust_id)和隐性标识的 orders 表 child-column(即 cust_id)之间,由占位符和“PARAMETER 0”指定。
注意 PARAMETER 子句仅属于 Shape 命令语法。与 ADO Parameter 属性和 Parameters 集合均无关联。
在执行 Shape 命令时,发生如下情形:
执行 parent-command,并返回 customer 表的父 Recordset。
子集列被追加到父 Recordset。
在访问父行的子集列时,customer.cust_id 列的值将替换 orders.cust_id 的占位符,并执行 child-command。
orders 表(在此,orders.cust_id 列的值与 customer.cust_id 列的值相匹配)的所有行被检索。
对检索到的子行(即子 Recordset 的 chapter)的引用被放置在父 Recordset 当前行的子集列。
当访问另一个行的子集列时,重复步骤 3-5。
用Shape命令建立一个分层的记录集:
Dim Conn
Dim Rs
Dim ChildRs
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = [your connectionstring]
Conn.Open
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.StayInSync = FALSE
Rs.Open "SHAPE {select distinct [class] from [thetable]} " & _
"APPEND ({select * from [thetable} " & _
"RELATE class TO class) AS classNum", conn
Set ChildRs = Server.CreateObject("ADODB.Recordset")
While Not Rs.Eof
Set ChildRs = rs("classNum").Value
Response.Write "<table>"
While Not ChildRs.Eof
Response.Write "<tr><td>" & ChildRs("Class") & "</td><td>" & ChildRs("Name") & "</td><td>" & ChildRs("Resume") & "</td><td>" & ChildRs(Regdate) & "</td></tr>"
ChildRs.MoveNext
Wend
Response.Write "</table>"
Rs.MoveNext
Wend