VBA Excel ADO SQL 更新查询不起作用

Posted

技术标签:

【中文标题】VBA Excel ADO SQL 更新查询不起作用【英文标题】:VBA Excel ADO SQL Update Query Not Working 【发布时间】:2018-07-10 00:11:51 【问题描述】:

我是 VBA 和 Excel 脚本的新手,但是,我正在尝试使用它来连接到我创建的 SQL Server。我已经从用户表单构建了一个通用查询,并创建了一个成功的 SELECT 语句来填充我的工作表。

但是,当我尝试在数据库中更新此信息时,我没有成功。该代码不会引发任何错误,但我无法在数据库中找到我的更改。这是我的尝试:

Private Sub dbUpdate(Query)

Dim conn As ADODB.Connection
Dim recset As ADODB.Recordset
Dim cmd As ADODB.Command
Dim strConn As String

'Create the connection string
strConn = "Provider=SQLNCLI11;Server=IP-Address;Database=Info;Trusted_Connection=yes;DataTypeCompatibility=80;"

'Create the connection and recordset objects
Set conn = New ADODB.Connection
Set recset = New ADODB.Recordset

'Open the connection
conn.Open strConn

'Open the recordset with the query
'Previous attempt, no errors
'recset.Open Query, conn

'Execute the recordset
Set cmd = New ADODB.Command
'The below execution of a query throws errors I believe
cmd.CommandText = Query
Set recset = cmd.Execute

'Close things up
Set recset = Nothing
'recset.Close
conn.Close
Set conn = Nothing

End Sub

我很确定查询是正确的,但是如果我仍然无法弄清楚我会在明天更新。

【问题讨论】:

您的代码不会尝试更新数据。您没有包含Query 的内容,因此很难弄清楚可能出了什么问题。 【参考方案1】:

这是一个可能适合您的示例。

Sub ImportDataFromExcel()
    Dim rng As Range
    Dim r As Long
    Dim conn As ADODB.Connection
    Dim strConn As String
    Dim strSQL As String

    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        "C:\Users\Ryan\Desktop\Coding\Integrating Access and Excel and SQL Server\Access & Excel & SQL Server\" & _
        "EXCEL AND ACCESS AND SQL SERVER\Excel & Access\Select, Insert, Update & Delete\Northwind.mdb"
    Set conn = New ADODB.Connection
    conn.Open strConn

    With Worksheets("Sheet1")
        lastrow = .Range("A2").End(xlDown).Row
        lastcolumn = .Range("A2").End(xlToRight).Column
        Set rng = .Range(.Cells(lastrow, 1), .Cells(lastrow, lastcolumn))
    End With

        'therow = 1

        For i = 2 To lastrow
            'r = rng.Row
            'If r > 1 Then
                strSQL = "UPDATE PersonInformation SET " & _
                    "FName='" & Worksheets("Sheet1").Range("B" & i).Value & "', " & _
                    "LName='" & Worksheets("Sheet1").Range("C" & i).Value & "', " & _
                    "Address='" & Worksheets("Sheet1").Range("D" & i).Value & "', " & _
                    "Age=" & Worksheets("Sheet1").Range("E" & i).Value & " WHERE " & _
                    "ID=" & Worksheets("Sheet1").Range("A" & i).Value
                conn.Execute strSQL
            'End If
            'r = r + 1
        Next i


    conn.Close
    Set conn = Nothing
End Sub

有这么多不同的版本。希望您可以调整此示例以满足您的特定需求。

【讨论】:

以上是关于VBA Excel ADO SQL 更新查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 查询中使用变量会引发 ADO 错误

Excel VBA ADO查询循环太多行

在通过 ADO SQL 的 VBA Excel 中,我如何才能“仅引用一次”记录并将其链接到另一个以避免调用相同的记录?

使用 VBA 在 Excel 中的 SQL 表上使用参数化查询

VBA与SQL哪个比较难?哪个比较高效?

将 SQL Server 凭据添加到 ADO 连接