ultset方法,除了name参数以外,也可以使用lock、 locktype、option等。下面是从Resultset中将数据读取到ListBox中的方法:
Do Until Rs.EOF
List1.AddItem Rs(“au_lname”)
Rs.MoveNext
Loop
存储过程虽然不在本文讨论的范围内,这里也简单地介绍一下。存储过程基本上有以下4种类型:
{call myStoreProcedure} '' 没有参数的存储过程
{call myStoreProcedure(?)} '' 单一的输入或输出参数
{? = call myStoreProcedure(?)} '' 单一参数、有返回值
{? = call myStoreProcedure(?, ?)} '' 多个参数、有返回值
下面演示一个运行存储过程的例子:
sp_GetVendorCount参数是名称的条件,其返回值为符合该条件的记录数。
Dim CPw As rdoQuery
Dim sSQL As String
SSQl = “{? = call sp_GetVendorCount(?)}”
这里“名称的条件”是输入参数,由ODBC驱动器进行自动识别。使用rdoParameters(n).Direction可以对返回值(rdParamReturnValue)、输入参数 (rdParamInput) 、输出参数(rdParamOutput)和输入输出参数(rdParamInputOutput)加以控制。但通常ODBC都会读入存储过程的定义式,并加以正确识别,所以绝大多数的情况下不必使用这个参数。
Dim CPw = Cn.CreateQuery(“GetVendorCount”, sSQL)
代码生成名为GetVendorCount的rdoQuery对象,并将rdoQuery对象自动增加到rdoQueries集合中,以后可以重复使用。
现在将CPw对象的第一个参数指定为返回值:
CPw.rdoParameters(0).Direction = rdParamReturnValue
最后由Execute方法运行:
CPw.Execute
返回行的
查询(存储过程中包含一个以上的SELECT)时,可使用OpenResultset方法。运行后,可通过rdoParameters集合取得返回值:
If CPw.rdoParameters(0) > 0 Then
MsgBox CPw.rdoParameters & “数据取得成功”
Else
MsgBox “数据读取失败”
End If
数据的追加、更新、删除
对SQL语句已经有一定了解的读者,应该比较熟悉INSERT、UPDATE、DELETE等语句。对于rdoConnection对象,虽然可以在OpenResultset的Name参数中直接代入SQL语句,用Execute方法运行,但没有充分利用RDO对象的长处。在rdoResultset中有AddNew、Edit、Update、Delete、MoveNext、MovePrevious、MoveFirst、MoveLast方法,与DAO/Jet相似,用起来非常便利。
下面在先前的Resultset的例子中追加记录:
Rs.AddNew
Rs(“au_id”) = “111-46-1992”
Rs(“au_lname”) = “Takenami”
RS(“au_fname”) = “Teruo”
''设定所有的field,通常调用Call SetField,在别的模块中设定
Rs.Update
与SQL语句中的INSERT相比起来,这种方法非常简单,而且代码可读性好。记录的更新方法如下,与追加相似,所不同的只有最初的Edit方法:
Rs.Edit
Rs(“au_lname”) = “Takenami”
RS(“au_fname”) = “Teruo”
''设定所有的field,通常调用Call SetField,在别的模块中设定
Rs.Update
在实际应用中,字段的更新放在别的模块中,便于从AddNew、Edit两种处理中都可以进行调用。
使用Delete方法删除记录时,当前行被删除。当前行可以通过MoveNext、MovePrevious等Move方法以及Bookmark属性设定。
Rs.Delete ''删除当前记录
这里需要注意的是当前记录被删除之后记录指针的位置。Delete执行后,记录指针仍然指向已被删除的记录,也就是空的记录,对这