簡體   English   中英

通過VB按鈕從Excel插入表到具有變量的存儲過程

[英]Insert Into Table from Excel via VB button to stored procedure with Variables

我有一個包含兩列的簡單表AMC_GW_TESTTABLE名稱為 nvarchar(20)和電話為 nvarchar(12)。 我也有一個帶有兩個變量的簡單存儲過程。

create procedure AMC_GW_TESTSP (@name nvarchar(20),
                                @phone nvarchar(12)) as
insert into AMC_GW_Testtable (name,phone)
values (@name, @Phone)

我已經能夠在Excel中獲得一個按鈕來創建命令:

exec dbo.amc_gw_testsp 'fred' '620-555-1212'

但是它不執行它。 我將它完全復制到我的SSMS並執行它,並且效果很好。 有任何想法嗎?

VBA代碼

Sub Button1_Click()

    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim connStr As String
    Dim param As ADODB.Parameter
    Dim param2 As ADODB.Parameter

    connStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" _
              & "Initial Catalog=am_app);Data Source=bcu-sql-01"

    Set conn = New ADODB.Connection
    conn.ConnectionString = connStr
    conn.Open

    Set cmd = New ADODB.Command
    With cmd
        .ActiveConnection = conn
        .CommandType = adCmdStoredProc
        .CommandText = "AMC_GW_TESTSP"
        Set param = .CreateParameter("@name", adVarChar, adParamInput, 20, "Christopher")
        .Parameters.Append param
        Set param2 = .CreateParameter("@phone", adVarChar, adParamInput, 12, "0123456789")
        .Parameters.Append param

      .Execute
    End With

    conn.Close
    Set cmd = Nothing
    Set conn = Nothing

End Sub

我希望我不會因為要求VBA代碼而嚇到你

讓您知道應該擁有什么:

Sub Button1_Click()

Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim connStr As String
Dim param As ADODB.Parameter
Dim param2 As ADODB.Parameter

    connStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
    "Initial Catalog=dbname;Data Source=servername"

    Set conn = New ADODB.Connection
    conn.ConnectionString = connStr
    conn.Open

    Set cmd = New ADODB.Command
    With cmd
        .ActiveConnection = conn
        .CommandType = adCmdStoredProc
        .CommandText = "AMC_GW_TESTSP"
        Set param = .CreateParameter("@name", adVarChar, adParamInput, 20, "Christopher")
        .Parameters.Append param
        Set param2 = .CreateParameter("@phone", adVarChar, adParamInput, 12, "0123456789")
        .Parameters.Append param

      .Execute
    End With
    conn.Close
    Set cmd = Nothing
    Set conn = Nothing

End Sub

您必須更改的事情。 首先是連接字符串(connStr)。 您將需要提供數據庫名稱代替dbname,並提供服務器代替servername。 此外,此字符串還假定您正在對SQL Server使用Windows身份驗證。 如果不是,則需要刪除Integrated Security = SSPI。 並在其位置提供User ID = myUser; Password = myPassword;。 接下來,您會注意到.CreateParameter函數中的最后一個參數是固定字符串(“ Christopher”和“ 0123456789”)。 在您的情況下,它們應該是來自電子表格中單元格的變量。 請,請確保這些字符串不包含“;” 在嘗試執行之前。

希望對您有所幫助,但如有任何不清楚之處,請隨時與我聯系!

PS:您需要確保在“工具參考”下,已選中最高版本的Microsoft ActiveX數據對象庫(我的版本是6.1,但絕對可以使用2.0或更高版本)。

暫無
暫無

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

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