用 RDO 编写一个典型的存储过程

这个例子将展示一个存储过程必需的步骤,该过程带有两个参数。存储过程的参数可以是输入,输出或输入输出参数。在绝大多数的情况下,ODBC 驱动程序可以自动确定参数的类型并正确指定其 Direction 属性。本例执行的是 sp_password 过程,该过程可以在 SQL Server 系统中改变用户的密码。假定所要改变的密码属于当前用户,因为只有系统管理员才能修改用户的密码。

这个过程接受两个输入参数并返回一个返回值。可以使用 Execute 方法运行该查询,但返回值将会丢失。这样就没有简单的方法可以得知密码的改变是否成功。为了获取返回值并创建一个可以重复执行修改密码的 rdoQuery,可以用以下代码:

Dim CPw As rdoQuery, QSQL As String
QSQL$ = "{ ? = call sp_password (?, ?) }"

接下来的一行代码创建了 rdoQuery,并将其命名为 SetPassword。SQL 属性设置为上面所定义的 QSQL 查询。这行代码只需执行一次。新的 rdoQuery 对象会自动追加到 rdoQueries 集合,可以重复地调用它。

Set CPw = cn.CreateQuery("SetPassword",QSQL$)

下面一步设置了 Direction 属性,表明参数是输入、输出还是输入输出参数。缺省的 Direction 是 rdParamInput,但在绝大多数情况下根本不需要设置 Direction 属性,因为 ODBC 驱动程序可以通过存储过程确定这个值。

参数的序数取决于它们在 SQL 语句中出现的次序。在本例中,“0”号参数是返回值 (? = ),第一号是第一个输入参数,第二号是第二个输入参数。可以看出来,rdoParameters 集合是从零开始计数的。以下的代码引用了 rdoParameters 集合,该集合是 rdoQuery 对象的缺省集合。

Cpw.rdoParameters(0).Direction = rdParamReturnValue

接下来的这一步设置了二个输入参数,RDO 在查询执行时将它们插入到该查询中。请注意,rdoParameters 是缺省的集合,因此在以下代码中被略去了。

Cpw(1) = "clyde"      '设置第一个输入参数。
Cpw(2) = "framis"      '设置第二个输入参数。

在参数的传递方向和值都设置好之后,如果没有返回值,可以使用 Execute 方法运行该查询,如果这个过程包括一个或多个 SELECT 语句,使用 OpenResultset 方法:

Cpw.Execute()

过程执行完之后,立即检查 rdoParameters 集合以获取返回值:

If Cpw.rdoParameters(0) <> 0 Then
   Msgbox "Could not change password"
End If