Excel VBA存储过程参数不工作?

我用VBA中的参数在存储过程中苦苦挣扎。 下面的代码没有参数工作正常,但参数不工作。

我的代码:

Sub CopyDataFromDatabase() Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Dim Fields As ADODB.Field Dim Cmd As ADODB.Command Set Conn = New ADODB.Connection Set Cmd = New ADODB.Command Set Rs = New ADODB.Recordset Conn.Open "My connection string here--------" Cmd.CommandType = adCmdStoredProc Cmd.Parameters.Append Cmd.CreateParameter("@Division", adVarChar, adParamInput, 40) Cmd.Parameters("@Division").Value = "South" Cmd.Parameters.Append Cmd.CreateParameter("@Area", adVarChar, adParamInput, 40) Cmd.Parameters("@Area").Value = "IT" Cmd.CommandText = "My SP here------" Set Rs = Cmd.Execute On Error GoTo CloseRecordset Worksheets.Add For Each Fields In Rs.Fields ActiveCell.Value = Fields.Name ActiveCell.Font.Bold = True ActiveCell.Font.Underline = True ActiveCell.HorizontalAlignment = xlCenter ActiveCell.Interior.Color = RGB(0, 128, 255) ActiveCell.Font.Color = RGB(255, 255, 255) ActiveCell.Offset(0, 1).Select Next Fields Range("A1").Select Range("A2").CopyFromRecordset Rs CloseRecordset: Rs.Close Set Rs = Nothing Set Cmd = Nothing CloseConnection: Conn.Close Set Conn = Nothing End Sub 

当我运行时,它没有给出任何错误,只是显示像执行,但没有结果

有人可以build议我在哪里做错了吗? 谢谢

我已经成功地声明了一个变体数组,并将参数(按顺序!)填充到该数组中,然后传递给数组到execute方法中以执行存储过程。

假设你的存储过程期望“分区”然后是“区域”,像这样的事情可能会诀窍:

 Sub CopyDataFromDatabase() Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Dim Fields As ADODB.Field Dim Cmd As ADODB.Command 'New variable Dim v_Params(1 To 2) As Variant 'assuming you have 2 parameters Set Conn = New ADODB.Connection Set Cmd = New ADODB.Command Set Rs = New ADODB.Recordset Conn.Open "My connection string here--------" v_Params(1) = "South" v_Params(2) = "IT" With Cmd .ActiveConnection = Conn .CommandType = adCmdStoredProc .CommandText = "My SP here------" .CommandTimeout = 0 Set rs = .Execute(, v_Params) End With 

看看是否有效,因为我目前正在使用这种方法成功。 我没有看到需要修改你的子程序的其余部分。

我使用With CmdEnd With来避免每次完全限定参考。

更新

这个问题的作者发现的问题是,当参数传入时,SP是超时的。 解决scheme是将CommandTimeout属性设置为0。