簡體   English   中英

Excel VBA-運行SQL存儲過程錯誤

[英]Excel VBA - Run SQL Stored Procedure Error

我從此頁面復制的Excel工作簿中有以下代碼

碼:

Sub Button1_Click()

Dim con As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim WSP1 As Worksheet

Set con = New ADODB.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset

'''Clear extract area'''
Worksheets("Extract").UsedRange.Delete

'''Log into SQL Server'''
con.Open "Provider = SQLOLEDB;" & _
         "Data Source = MySource;" & _
         "Initial Catalog = MyDB;" & _
         "User ID = MyID;" & _
         "Password = MyPassword;"
cmd.ActiveConnection = con

'''Set up parameters for stored procedure'''
cmd.Parameters.Append cmd.CreateParameter("startDate", adDate, adParamInput, , Range("C2"))
cmd.Parameters.Append cmd.CreateParameter("endDate", adDate, adParamInput, , Range("C3"))

cmd.CommandText = "DB.StoredProc"
Set rs = cmd.Execute(, , adCmdStoredProc)

Set WSP1 = Worksheets("Extract")
WSP1.Activate
If rs.EOF = False Then WSP1.Cells(1, 1).CopyFromRecordset rs

rs.Close
Set rs = Nothing
Set cmd = Nothing

con.Close
Set con = Nothing

End Sub

我在“如果rs.EOF = False然后”行中收到以下錯誤消息

“關閉對象時不允許操作。”

這是我第一次使用這些功能。 我做錯了什么?

另外,我是否正確設置了多個參數?

---快速編輯---不知道是否值得一提,我已將日期格式設置為yyyy-mm-dd,就像在SQL Server中一樣。

通過將SET NOCOUNT ON添加到我的存儲過程中,我已經解決了該問題。

最初我不確定是否可以進行更改。 我有一個新問題。 如果我僅使用一個參數,而在使用多個參數時不使用它,則該方法有效。

我將關閉此線程,進行一些研究,並可能打開一個新線程。

謝謝你的幫助。

 cmd.CommandText = "DB.StoredProc"

應該是存儲過程的實際名稱-除非您實際將其命名為StoredProc?

這里有兩個選項供您考慮。

Option Explicit

Sub RunSProc()

'USE [Northwind]
'GO
'DECLARE @return_value int
'EXEC    @return_value = [dbo].[TestNewProc]
'        @ShipCountry = NULL
'SELECT  'Return Value' = @return_value
'GO

Dim con As Connection
Dim rst As Recordset
Dim strConn As String

Set con = New Connection
strConn = "Provider=SQLOLEDB;"
strConn = strConn & "Data Source=YOUR_SERVER_NAME;"
strConn = strConn & "Initial Catalog=YOUR_DB_NAME;"
strConn = strConn & "Integrated Security=SSPI;"

con.Open strConn

'Put a country name in Cell E1
Set rst = con.Execute("Exec dbo.TestNewProc '" & ActiveSheet.Range("E1").Text & "'")

'The total count of records is returned to Cell A5
ActiveSheet.Range("A5").CopyFromRecordset rst

rst.Close
con.Close

End Sub


Sub TryThis()

'USE [Northwind]
'GO
'DECLARE @return_value int
'EXEC    @return_value = [dbo].[Ten Most Expensive Products]
'SELECT  'Return Value' = @return_value
'GO

Dim con As Connection
Dim rst As Recordset

Set con = New Connection
con.Open "Provider=SQLOLEDB;Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DB_NAME;Integrated Security=SSPI;"

Set rst = con.Execute("Exec dbo.[Ten Most Expensive Products]")
'Results of SProc are returned to Cell A1
ActiveSheet.Range("A1").CopyFromRecordset rst

rst.Close
con.Close
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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