日期:2009-04-16  浏览次数:21037 次

数据构形一般需要两个提供者。服务提供者 OLE DB 的数据构形服务提供数据构形功能,而数据提供者,例如 SQL Server 的 OLE DB 提供者,则提供充填成形 Recordset 的数据行。

服务提供者的名称可以指定为 Connection 对象 Provider 属性的值,或连接字符串关键字“Provider=”。

数据提供者的名称可以指定为“Data Provider”动态属性的值,该动态属性由 Data Shaping Service for OLE DB 添加到 Connection 对象 Properties 集合。或者也可以指定为连接字符串关键字“Data Provider=”。

如果没有充填 Recordset(例如,如果成形 Recordset 的所有列均使用 NEW 关键字创建),则不需要数据提供者。在这种情况下指定“Data Provider=none”。

范例

Dim cnn As New ADODB.Connection
cnn.Provider = "MSDataShape"
cnn.Open "Data Provider=MSDASQL;DSN=vfox;uid=sa;pwd=vfox;database=pubs”
常规 Shape 命令


“数据构形”定义了成形 Recordset 的列、由列代表的条目之间的关系以及数据充填到 Recordset 的方式。

成形的 Recordset 可以由如下类型的列组成:

列类型 说明
数据 由对数据提供者、表或以前成形 Recordset 使用查询命令所返回的 Recordset 的字段。
子集 对另一个 Recordset 的引用,称为“子集”。子集列使定义“父-子”关系成为可能,在这种关系中“父”是包含子集列的 Recordset,“子”是由子集代表的 Recordset。
合计 列的值通过对所有行执行“合计函数”获得,或者是子 Recordset 的所有行的列。(请参阅下表中的合计函数。)
计算表达式 列的值通过对在 Recordset 的相同行中的列进行 Visual Basic for Applications 表达式的计算而获得。表达式是 CALC 函数的参数。(请参阅下表中的计算表达式。)
新建 空的、虚构的字段,可在随后充填数据。列使用 NEW 关键字定义。(请参阅下表中的 NEW 关键字。)


Shape 命令可以包含子句,指定针对基本数据提供者并将返回 Recordset 对象的查询命令。查询的语法取决于对基本数据提供者的要求。虽然 ADO 并不要求使用任何指定的查询语言,但通常是使用结构化查询语言 (SQL)。

您可以使用 SQL JOIN 子句关联两个表,但是,分级 Recordset 可以更有效地表达信息。由 JOIN 创建的 Recordset 的每行会多余地重复一个表中的信息。分级 Recordset 的多个子 Recordset 对象中,每个对象仅有一个父 Recordset。

Shape 命令可以仅由 Recordset 对象发出。

Shape 命令可以嵌套,即父命令或子命令本身可以是另一个 Shape 命令。

有关定位分级 Recordset 的详细信息,请参阅访问分级 Recordset 中的行。

有关语法正确的 Shape 命令的详细信息,请参阅形状语法格式。

合计函数、CALC 函数和 NEW 关键字

数据构形支持如下函数。chapter-alias 是指定给包含了将被操作列的子集名称。

chapter-alias(子集-别名)可以是完整的,由指向包含 column-name 的子集的每个子集列名称组成,全部用句号分隔。例如,如果父子集 chap1 包含拥有数量列 amt 的子子集,则完整名即是 chap1.chap2.amt。

合计函数 说明
SUM(chapter-alias.column-name) 计算指定列中所有值的和。
AVG(chapter-alias.column-name) 计算指定列中所有值的平均值。
MAX(chapter-alias.column-name) 计算指定列中的最大值。
MIN(chapter-alias.column-name) 计算指定列中的最小值。
COUNT(chapter-alias[.column-name]) 计算指定别名或列中行的数量。
STDEV(chapter-alias.column-name) 计算指定列中的标准偏差。
ANY(chapter-alias.column-name) 列的值(列的值在所有行均相同)。

计算表达式 说明
CALC(expression) 计算任意表达式,但仅针对包含 CALC 函数的 Recordset 行。可以是任何 Visual Basic for Applications (VBA) 函数或表达式。

NEW 关键字 说明
NEW (field type [(width | scale ][,precision])] 将指定类型的空列添加到 Recordset。