简体   繁体   中英

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

I have a simple table AMC_GW_TESTTABLE with two columns, name nvarchar(20) and phone nvarchar(12). I also have a simple stored procedure with two variables.

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

I have been able to get a button in Excel to create the command:

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

But it does not execute it. I copy this to my SSMS exactly like it and execute it and it works fine. Any ideas?

VBA code

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

I hope I did not scare you with a request for VBA Code

To give you an idea of what you should have:

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

Things that you will have to change. Firstly the connection string (connStr). You will need to provide database name in place of dbname and server in place of servername. Also this string is assuming that you are using Windows Authentication for your SQL Server. If not you need to remove Integrated Security=SSPI; and in its place supply User ID=myUser;Password=myPassword;. Next you will notice that the last parameter in the .CreateParameter function is a fixed string ("Christopher" and "0123456789"). In your case, they should be variables taken from cells in the spreadsheet. Please, please make sure that these strings do not contain ";" before trying to Execute.

I hope this helps, but feel free to contact me, if anything is less than clear!

PS You will need to make sure under Tools References, that you have the highest version of Microsoft ActiveX Data Objects Library checked (mine is 6.1, but anything 2.0 or higher definitely works).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM