[英]Excel VBA executing SQL Server stored procedure - result set throwing error 3704
我正在尝试从Excel VBA执行SQL Server存储过程。 该过程将行返回到结果集对象。 但是,在运行代码时,它将引发错误:
3704当对象关闭时,不允许进行操作
注意:
数据库连接没有问题,因为在同一连接对象上运行的Select
查询工作正常。
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Dim rst As New ADODB.Recordset
Set cn = New ADODB.Connection
Set cmd = New ADODB.Command
ThisWorkbook.initialize
cn.Provider = "sqloledb"
cn.Properties("Data Source").Value = ThisWorkbook.server
cn.Properties("Initial Catalog").Value = ThisWorkbook.db
cn.Properties("User ID").Value = "xxxxx"
cn.Properties("Password").Value = "xxxxx"
cn.Open
Set cmd = New ADODB.Command
cmd.CommandText = "Generate_KPI_Process_Quality_Check_RunTime"
cmd.CommandType = adCmdStoredProc
cmd.ActiveConnection = cn
Set prm = cmd.CreateParameter("@currentMonth", adChar, adParamInput, 255, cmb_month.Value)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@center", adChar, adParamInput, 255, cmb_center.Value)
cmd.Parameters.Append prm
rst.CursorType = adOpenStatic
rst.CursorLocation = adUseClient
rst.CursorLocation = adUseServer
rst.LockType = adLockOptimistic
rst.Open cmd
If (rst.BOF And rst.EOF) Then
'Some Code
End If
放
SET NOCOUNT ON
在存储过程中-这将防止生成输出文本,例如“已更新1条记录”。
您必须为Recordset Object
的Open
方法提供更多参数
尝试rst.Open cmd, cn
使用Set关键字分配对象:
Set cmd.ActiveConnection = cn
否则,将分配Connection对象的默认属性(恰好是连接字符串)来代替Connection对象本身。
只需放入另一个包含结果集的记录集
Dim rst1 As New ADODB.Recordset
SET rst1=rst.NextRecordset 'this will return the first resultset
If rst1.BOF or rst1.EOF Then...
'some code
End If
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.