错误:"没有为命令对象设置命令文本"在VBA上从SQL运行存储过程时

时间:2018-01-22 11:44:56

标签: sql-server vba excel-vba stored-procedures excel

我尝试使用以下VBA代码在VBA上运行存储过程: 请有人建议:我在" rs.Open"。

收到错误
Sub connection()

   Dim Conn As ADODB.connection
    Dim ADODBCmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim i As Integer
    Dim constring As String
    Dim location As String  'the server
    Dim password As String


location = "10.103.98.18" 
password = "password"
constring = "Provider=SQLOLEDB; Network Library=DBMSSOCN;Data Source=" & location & ";Command Timeout=0;Connection Timeout=0;Packet Size=4096; Initial Catalog=ElColibri; User ID=Analyst1; Password=password;"



Set Conn = New ADODB.connection
Conn.connectionString = constring
'On Error GoTo ConnectionError
Conn.Open






'loginstatus = False
'Exit Sub


'errorhandl0
'ConnectionError:
'MsgBox "Not possible to log in. Have you entered the correct password?"

'open recordset
Set ADODBCmd = New ADODB.Command
ADODBCmd.ActiveConnection = Conn
ADODBCmd.CommandTimeout = 1200
ADODBCmd.CommandText = ["ukrmc.dbo.FridayCommentary"]
ADODBCmd.CommandType = 4 'adCmdStoredProc
ADODBCmd.Execute
Set rs = New ADODB.Recordset
rs.ActiveConnection = Conn
rs.Open

Conn.Close
Set Conn = Nothing
Set ADODBCmd = Nothing

'Paste to spreadsheet
ThisWorkbook.Worksheets("macrotest").Range("a2").CopyFromRecordset
'Set rs = conn.Execute(Query)
rs.Close
Set rs = Nothing


End Sub

对我而言,代码对我来说具有逻辑意义,因此我不确定错误的含义。因为对我来说,我已经为命令对象设置了文本。

2 个答案:

答案 0 :(得分:1)

您没有将记录集连接到命令。假设您的存储过程发出SELECT,请将代码更改为

Set rs = ADODBCmd.Execute
thisWorkbook.Worksheets("macrotest").Range("a2").CopyFromRecordset rs

Execute - 方法将返回Recordset作为结果,无需自己创建。

答案 1 :(得分:0)

或者您应该将命令对象添加到打开操作

rs.Open ADODBCmd