调存储过程的问题

fj182 2006-04-23 04:55:10
我写了个函数来调用存储过程,函数如下
Public Function ExecProc(ByVal ProcName As String, ByVal Para As Variant) As Recordset

Dim i As Integer
Dim comNew As Command
Dim prmNew As Parameter
Dim rs As Recordset
Dim conNew As Connection

Set conNew = OpenConnection() '打开连接

If UBound(Para) = 0 Then
Set rs = conNew.Execute(ProcName, , adCmdStoredProc)
Else
Set comNew = New Command

'找出存储过程需要什么参数
With comNew
.ActiveConnection = conNew
.CommandText = ProcName
.CommandType = adCmdStoredProc
.Parameters.Refresh
End With

'将输入参数每项的值赋给Parameters集合并执行存储过程
i = 1
For Each prmNew In comNew.Parameters
If prmNew.Direction = adParamInput Or prmNew.Direction = adParamInputOutput Then
prmNew.Value = Para(i)
i = i + 1
End If
Next prmNew
Set rs = comNew.Execute()
End If
Set ExecProc = rs
End Function
其中,ProcName为存储过程名,Para是一个参数数组,调用时

Dim v As Variant
Dim rst As Recordset

ReDim v(2)

v(1) = 123
v(2) = "abc"

Set rst = ExecProc("Test", v)
程序运行时也没报错,可就是返回的记录集为空,那位大哥帮我看看。
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fj182 2006-04-23
  • 打赏
  • 举报
回复
问题解决了,加了句set nocount on,靠,瞎忙活了一下午。
fj182 2006-04-23
  • 打赏
  • 举报
回复
存储过程执行后返回的Recordset是关闭的,但我从查询分析器里能够返回结果集。
fj182 2006-04-23
  • 打赏
  • 举报
回复
还是不行啊
faysky2 2006-04-23
  • 打赏
  • 举报
回复
For Each prmNew In comNew.Parameters
If prmNew.Direction = adParamInput Or prmNew.Direction = adParamInputOutput Then
prmNew.Value = Para(i)
i = i + 1
End If
Next prmNew
---------------------------------
试试这样:

Dim param As New ADODB.Parameter
For Each prmNew In comNew.Parameters
If prmNew.Direction = adParamInput Or prmNew.Direction = adParamInputOutput Then
Set param = comNew.CreateParameter(prmNew.Name, prmNew.Type, adParamInput, prmNew.Size, Para(i))
comNew.Parameters.Append param
i = i + 1
End If
Next prmNew
fj182 2006-04-23
  • 打赏
  • 举报
回复
补充一下,存储过程没问题。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧