RDO 的集合管理

RDO 用集合管理除 RDO 引擎以外的所有 RDO 对象。因为 Visual Basic 6.0 目前支持创建一些独立对象,例如 rdoConnection 和 rdoQuery 对象,所以不是所有的对象都会自动追加到它们的父集合上;但在绝大多数情况下,这是自动完成的。独立的 rdoConnection 和 rdoQuery 对象可以用 Add 方法追加到它们的父集合上,用 Remove 方法从集合中删除。

在使用 CreateQuery 方法时,rdoParameters 集合是自动创建的。但是,如果由于某种原因 ODBC 接口不能对该 SQL 语法进行分析,这个用于管理查询参数的集合将不被创建。因此,除非 RDO 成功地将 SQL 参数查询作为 rdoQuery 对象的 SQL 属性进行了语法分析,否则任何对 rdoParameters 集合的引用都会导致可捕获的错误。如果 ODBC 数据源驱动程序不支持 SQLNumParams 函数或该函数返回错误,这个集合也不能创建。

下表列出了 RDO 管理的集合:

RDO 集合 描述
rdoErrors 包括所有的存储 rdoError 对象,这些对象涉及到远程数据对象 (RDO) 的一次简单操作。
rdoEnvironments 包括 rdoEngine 对象的所有活动 rdoEnvironment 对象。rdoEnvironments(0) 是自动创建的。
rdoConnections 包括在 rdoEnvironment 对象中打开或创建的所有对象,或者利用 Add 方法分配并追加到 rdoConnections 集合的对象。
rdoTables 包括数据库中保存的所有 rdoTable 对象。
rdoResultsets 包括 rdoConnection 中打开的所有 rdoResultset 对象。
rdoColumns 包括一个 rdoResultset 或 rdoTable 对象的所有 rdoColumn 对象。
rdoQueries 包括已追加到 rdoQueries 集合的 rdoQuery 对象,这些对象可能是通过 CreateQuery 自动追加的,或者通过 Add 方法追加的。
rdoParameters 如果 SQL 语句被正确进行语法分析,那么该对象包括了一个 rdoQuery 对象的所有 rdoParameter 对象。它还包括与查询中的每一个标记参数相对应的 rdoParameter 对象。

RDO 1.0 集合

RDO 1.0 对象和集合的管理方式与 RDO 2.0 不同。当打开或创建一个新的 RDO 1.0 对象时,它会自动添加到与那些对象相关联的集合中,即使设置一个现有的变量到新创建的对象中也是如此。

例如,下列 RDO 1.0 代码创建了两个独立的 rdoConnection 对象:

Dim Cn as rdoConnection
Set Cn = rdoEnvironments(0).OpenConnection( _
      dsname:="MyDSN", _
      prompt:=rdDriverNoPrompt, _
      connect:="UID=;PWD=;")
Set Cn = rdoEnvironments(0).OpenConnection( _
       dsname:="MyOtherDSN", _
      prompt:=rdDriverNoPrompt, _
      connect:="UID=;PWD=;")

在执行这些代码后,两个 RDO 1.0 rdoConnection 对象均作为 rdoConnections 集合的成员被追加。请记住,在代码中必须对那些不再需要的对象使用 Close 方法,甚至是在赋值到同一个变量时,因为它们不会自动关闭。对于 rdoResultset 对象也是如此。

RDO 2.0 集合

在 RDO 2.0 中,如果将现有的变量设置为一个新创建的对象,那么在用新的 RDO 对象替换已有的 RDO 对象之前,将事先释放或者关闭原来的对象。这种改进使 RDO 的使用方式更类似于 DAO 对象。

当上述代码在 Visual Basic version 5.0 中通过 RDO 2.0 执行时,将只有一个 rdoConnection 对象被创建:第一个 rdoConnection 对象被关闭并从 rdoConnections 集合中删除。如果 Visual Basic 4.0 的代码明确地关闭了 RDO 连接和 rdoResultset 对象,则不必关心向后兼容。但是,如果还必须维护这些代码的话,则必须将新的 RDO 对象赋值到新的变量,否则将要丢失原始对象。