Insert new records only into SQL Table Using VBA

前端 未结 3 480
小鲜肉
小鲜肉 2020-12-29 12:40

I have an Excel workbook with the below code -

Sub Button1_Click()
    Dim conn As New ADODB.Connection
    Dim iRowNo         


        
相关标签:
3条回答
  • 2020-12-29 13:02

    You can use sql query like this:

    IF Exists ( Select 1 from dbo.customers where Firstname = '" & sFirstName & "' and LastName = '" & sLastName & "' THEN Update dbo.customers set --other columns where Firstname = '" & sFirstName & "' and LastName = '" & sLastName & "'
    ELSE Insert into dbo.Customers (FirstName, LastName) " & _
                         "values ('" & sFirstName & "', '" & sLastName & "')"
    

    Not sure about the syntax for excel and C#, you can correct that similar to this query

    0 讨论(0)
  • 2020-12-29 13:03

    Your SQL query isn't quite right - there is no THEN in a SQL IF.

    Also, you don't need to do anything if it does exist, so just use if not exists.

    "IF NOT EXISTS (SELECT 1 FROM dbo.Customers WHERE FirstName = '" & sFirstName & "' and LastName = '" & sLastName & "') " & _
             "INSERT INTO dbo.Customers (FirstName, LastName) " & _
             "VALUES ('" & sFirstName & "', '" & sLastName & "')"
    
    0 讨论(0)
  • 2020-12-29 13:12

    This should do it for you.

    Sub Button_Click()
    'TRUSTED CONNECTION
        On Error GoTo errH
    
        Dim con As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        Dim strPath As String
        Dim intImportRow As Integer
        Dim strFirstName, strLastName As String
    
        Dim server, username, password, table, database As String
    
    
        With Sheets("Sheet1")
    
                server = .TextBox1.Text
                table = .TextBox4.Text
                database = .TextBox5.Text
    
    
                If con.State <> 1 Then
    
                    con.Open "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & database & ";Integrated Security=SSPI;"
                    'con.Open
    
                End If
                'this is the TRUSTED connection string
    
                Set rs.ActiveConnection = con
    
                'delete all records first if checkbox checked
                If .CheckBox1 Then
                    con.Execute "delete from tbl_demo"
                End If
    
                'set first row with records to import
                'you could also just loop thru a range if you want.
                intImportRow = 10
    
                Do Until .Cells(intImportRow, 1) = ""
                    strFirstName = .Cells(intImportRow, 1)
                    strLastName = .Cells(intImportRow, 2)
    
                    'insert row into database
                    con.Execute "insert into tbl_demo (firstname, lastname) values ('" & strFirstName & "', '" & strLastName & "')"
    
                    intImportRow = intImportRow + 1
                Loop
    
                MsgBox "Done importing", vbInformation
    
                con.Close
                Set con = Nothing
    
        End With
    
    Exit Sub
    
    errH:
        MsgBox Err.Description
    End Sub
    

    Add a reference to: Microsoft ActiveX Data Objects 2.8 Library

    FYI, my sheet looks like this.

    0 讨论(0)
提交回复
热议问题