如何从Excel向SQL传递参数?

时间:2018-08-19 17:46:47

标签: sql-server excel vba

我正在尝试将参数从Excel传递到SQL Server存储过程。参数是日期,目的是将日期传递到查询中,然后查询返回该日期的结果。我提供了有关当前如何连接数据库的图片。

图片1(确实是Irlelevant,但我认为我还是应该包括它):https://imgur.com/TgRKOkc

图片2:https://imgur.com/FkH34qQ-在这里,我目前正在.CommandText区域中对参数进行硬编码,以检查是否正确传递了参数,该功能是否正常运行。返回的数据与硬编码值正确。我希望在此处用客户端在电子表格的单元格A14中输入的动态参数替换“ 2018-08-19”。

图片3:https://imgur.com/3LGTP3I-这是我觉得很困惑的地方,我是VBA的新手,所以我不知道如何将在特定单元格(在本例中为A14)中输入的值声明为在刷新Excel文档时传递给存储过程的参数。值得注意的是,我知道我在VBA代码中指向“ PreDealingFormA”,而连接是“ PreDealingFormA1”,这只是屏幕截图中的异常,此后我对此进行了更改,但尚未解决问题。我知道屏幕快照3中所示的代码是在单击按钮的命令上执行的,我以前认为这是失败的途径,但是由于要求,无法实现按钮。相反,其目的是传递输入到单元格A14中的参数,并在刷新Excel文档时执行存储的过程。

由于我是VBA的新手,因此对此提供了任何帮助,因此尽管看起来很基础,但现在我很难下决心。

1 个答案:

答案 0 :(得分:0)

您可以这样做。

Sub RunSProc()

Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim strConn As String

Set cn = New ADODB.Connection

strConn = "Provider=SQLOLEDB;"
strConn = strConn & "Data Source=Server_Name;"
strConn = strConn & "Initial Catalog=DB_Name;"
strConn = strConn & "Integrated Security=SSPI;"

cn.Open strConn

Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = "MyOrders"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters(1).Value = ActiveSheet.Range("E1").Text
cmd.Parameters(2).Value = ActiveSheet.Range("E2").Text
Set rs = cmd.Execute()

If Not rs.EOF Then
    Worksheets("sheet2").Range("A5:D500").CopyFromRecordset rs
    rs.Close
End If

End Sub

在这种情况下,设置如下所示。

enter image description here