数据构形一般需要两个提供者。服务提供者 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。