簡體   English   中英

Excel VBA執行SQL Server存儲過程-結果集拋出錯誤3704

[英]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 ObjectOpen方法提供更多參數

嘗試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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM