2014-02-12 66 views
1

我正在使用Excel 2007和SQL Server 2008 R2 Express。從Excel事件調用參數的SQL Server存儲過程

我想從VBA中的Excel事件Worksheet.Change調用我的SQL Server存儲過程。我有一張表,我用3個參數調用存儲過程。

在調用這個存儲過程我得到錯誤:

運行時錯誤 '-2147217900(80040E14)'
語法錯誤或訪問衝突

我Excel中的腳本代碼,以便遠:

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Address = "$D$4" Then 

    Dim conn As ADODB.Connection 
    Set conn = New ADODB.Connection 

    Dim cmd As ADODB.Command 
    Set cmd = New ADODB.Command 

    conn.ConnectionString = "Provider='SQLOLEDB'; " & _ 
          "Data Source=compname\sqlservername; " & _ 
          "Initial Catalog=databasename; " & _ 
          "User Id= sa; " & _ 
          "Password=****" 


    conn.Open 

    cmd.ActiveConnection = conn 
    cmd.CommandType = adCmdStoredProc 
    cmd.CommandText = "Test1 @zmienna1= " & CStr(Range("D4").Value) & _ 
          " @zmienna2= " & CStr(Range("D4").Value) & _ 
          " @zmienna3= " & CStr(Range("D4").Value) 



    cmd.Execute 'error 
    conn.Close 

    Set conn = Nothing 
    Set cmd = Nothing 

End If 
End Sub 

我就cmd.Execute行收到錯誤,當我改變D4細胞。

我錯過了什麼?當我使用具有參數的存儲過程時,是否必須使用ADODB.Command對象的Parameters集合?

如果是 - 任何人都可以提供代碼示例?任何人都可以幫忙嗎?謝謝!

回答

1

對於存儲過程,CommandText應該只是存儲過程的名稱。使用Command.Parameters集合添加參數。

Dim prm As ADODB.Parameter 
Set prm = cmd.CreateParameter("@par1", adChar, adParamInput, 255, _ 
    CStr(Range("D4").Value) 
cmd.Parameters.Append prm 
相關問題