使用 RDO 提交查询
在多数情况下,创建数据库前端的主要原因是用于检索、操作和显示数据,并提交所作的修改。程序中的大多数代码都涉及到建立查询、处理结果集,以执行这些基本操作。
在需要远程数据库的数据时,需要提交一个查询,指定所需的数据行。在更新数据时,则要提交更多的查询,将新的数据或所作的修改传递到远程数据库。如果应用程序需要执行管理任务,则必须提交包含高级指令的查询来运行服务器端的实用程序,以建立新的用户,或者运行数据库的修复或配置过程。实质上,RDO 所有与交互有关的方面都涉及到提交查询,基本的工作模式是:先提出问题,然后处理以结果集的形式返回的答案。
通常,RDO 查询处理可以分为两个方面:
- 提交由 SQL 语句构成的查询,它描述了结果集,或引用了一个存储过程。
- 处理结果行、参数以及返回值,也就是各种各样的结果集。
提交查询的过程包括:建立一个 SQL 语句,其中包含所有必需的参数,并将该查询送到远程服务器上处理。在决定如何提交查询时,必须先决定它返回时采用的形式。根据应用程序的需要,需要考虑以下的问题:
- 应用程序需要滚动或浏览数据吗?如果需要滚动,需要从两个方向滚动吗?
- 是否需要更新数据?如果是,能够使用动作查询来改动它吗?用户是否具有修改数据的权限?
- 有多少用户可能同时试图对相同的数据进行操作?能够控制那些应用程序吗?他们是否会与数据共享机制合作?
- 该查询将返回多少行数据?系统有能力保存这些行吗?网络是否具有传送这些行的带宽?
- 这些行如何返回?作为书签还是静态数据?
- 必须传递参数到该查询吗?
- 查询是返回行、输出参数还是返回值,还是仅仅执行一次操作?
- 在应用程序执行的过程中,该查询可能要运行很多次还是仅仅执行几次?
下列主题将帮助解决这些问题,解释各种情况下取得数据的正确策略。
管理 RDO 查询
在打开连接之后,就可以提交查询到远程服务器上执行。无论使用什么方法,RDO 都将使用下面两个 ODBC API 函数中的一个来执行查询并检索结果集。
- 如果该查询只需运行一次,那么对 rdoConnection 对象使用 OpenResultset 或 Execute 方法执行固定的 SQL 查询,从而创建 rdoResultset 对象或者执行动作查询。这种选择将导致查询使用 ODBC API SQLExecDirect 函数。也可以采用 rdExecDirect 选项和 Execute 或 OpenResultset 方法,强制使用 SQLExecDirect 函数。
- 如果使用的查询需要多次运行,并且可能需要参数,那么用 CreateQuery 方法实例化一个 rdoQuery 对象,该对象可以根据需要重新使用,并且允许在每次执行查询时修改一个或多个参数。创建了 rdoQuery 之后,对它使用 OpenResultset 或 Execute 方法,创建一个 rdoResultset 或执行动作查询。为了修改查询参数,可以改变 rdoParameter 对象的设置。这种选择将导致查询使用 ODBC API SQLPrepare 和 SQLExecute 函数。
- 如果使用存储过程来访问数据或执行动作查询,那么可以使用 User Connection 设计器来连接特定的存储过程,并创建自定义的 rdoQuery 对象来访问它们。这也可以用代码实现。这种选择将导致查询使用 ODBC API SQLPrepare 和 SQLExecute 函数。与数据库中存储的 DAO 查询不同,每当应用程序执行时,这些 rdoQuery 对象被重新创建。
注意 为了向后兼容,Visual Basic version 6.0 仍然支持已过时的 Visual Basic version 4.0 的 rdoPreparedStatement 对象,但在将来的开发中建议不要使用。最好用 rdoQuery 对象代替所有的 rdoPreparedStatement 对象的引用。