RDS 编程模型详述

适用于:Access 2013、Office 2013

以下列出了 RDS 编程模型的主要组成部分:

  • Rds。DataSpace
  • RDSServer.DataFactory
  • Rds。DataControl
  • 事件

Rds。DataSpace

客户端应用程序必须指定要调用的服务器和服务器程序。 反过来,应用程序收到一个针对服务器程序的引用,该引用可以被视作服务器程序本身。

RDS 对象模型通过 RDS.DataSpace 对象来实现此功能。

服务器程序用程序标识符或 ProgID 来指定。 服务器使用 ProgID 以及服务器计算机的注册表来查找有关要初始化的实际程序的信息。

RDS 在内部进行区分,具体取决于服务器程序是位于 Internet 上的远程服务器还是 Intranet;局域网上的服务器;或根本不在服务器上,而是在本地动态链接库 (DLL) 。 这种区别决定了如何在客户端和服务器之间交换信息,并在返回到客户端应用程序的引用类型方面产生切实的差异。 但是,从你的角度来看,这种区别没有特殊意义。 重要的是你会收到一个可用程序引用。

RDSServer.DataFactory

RDS 提供了一个默认的服务器程序,该程序可以针对数据源执行 SQL 查询并返回 Recordset 对象,还可以采用 Recordset 对象并更新数据源。

RDS 对象模型通过 RDSServer.DataFactory 对象来实现此功能。

此外,此对象还有一个用于创建空 Recordset 对象的方法,可以 (CreateRecordset) 以编程方式填充该对象,另一个方法用于将 Recordset 对象转换为文本字符串以 (ConvertToString) 生成网页。

通过 ADO,可以用 DataFactory 处理程序和包含连接、命令和安全参数的自定义文件替代 RDSServer.DataFactory 的某些标准连接和命令行为。

服务器程序有时也称为业务对象。 您可以编写自定义的业务对象,用于执行复杂的数据访问、有效性检查等。 即使是在编写自定义业务对象时,您也可以创建 RDSServer.DataFactory 对象的实例并使用该对象的某些方法来完成您自己的任务。

Rds。DataControl

可以通过 RDS 提供的方法,将 RDS.DataSpaceRDSServer.DataFactory 的功能结合在一起,并启用可视控件,以轻松地使用查询从数据源返回的 Recordset 对象。 最常见的情况是,RDS 会尽可能地自动获取有关服务器的信息的访问权,并将信息显示在可视控件中。

RDS 对象模型通过 RDS.DataControl 对象来实现此功能。

RDS.DataControl 具有两个方面。 其中一个方面关系到数据源。 如果使用 RDS.DataControlConnectSQL 属性设置命令和连接信息,则它将自动使用 RDS.DataSpace 创建针对默认 RDSServer.DataFactory 对象的引用。 随后, RDSServer.DataFactory 将使用 Connect 属性值连接到数据源,使用 SQL 属性值从数据源获取 Recordset ,并将 Recordset 对象返回给 RDS.DataControl

另一个方面关系到可视控件中返回的 Recordset 信息的显示。 可以将可视控件与 RDS 关联。DataControl 在称为绑定) 的过程中 (,并访问关联的 Recordset 对象中的信息,并在 Microsoft Internet Explorer 的网页上显示查询结果。 每个 RDS.DataControl 对象将一个表示单个查询结果的 Recordset 对象绑定到一个或多个可视控件(如文本框、组合框、网格控件等)。 每个页面上可能有多个 RDS.DataControl 对象。 每个 RDS.DataControl 对象可以连接到不同的数据源,并包含不同查询的结果。

对于关联的 Recordset 对象的行, RDS.DataControl 对象还有自己的导航、排序和筛选方法。 这些方法与 ADO Recordset 对象的方法很类似,但不尽相同。

事件

RDS 支持自己的两个事件,这些事件独立于 ADO 事件模型。 只要 RDS.DataControlReadyState 属性发生更改,便调用 onReadyStateChange 事件,以通知您异步操作已成功完成、终止或遇到错误。 只要发生错误,便调用 onError 事件,即使该错误发生于异步操作过程中也不例外。

注意

Microsoft Internet Explorer 为 RDS 提供了其他两个事件:onDataSetChangedRecordset 可用但仍在检索行)和 onDataSetCompleteRecordset 已完成行的检索)。