【问题标题】:How do I update a MS Access database using excel power query?如何使用 excel power query 更新 MS Access 数据库?
【发布时间】:2019-10-23 13:49:18
【问题描述】:

我有一个简单的问题。因此,我将所有数据库存储在访问(本地)中,然后我使用 excel 的电源查询从访问中导入数据。但是我希望在 excel 电子表格中所做的任何更改(我从访问中导入信息)直接使用电源查询在访问中进行?有什么办法吗?

提前致谢!

【问题讨论】:

  • 我猜可能是 VBA 中 onchange 的一个子项,它提交更改以访问或在保存工作表时执行此操作。通过 VBA,Microsoft 应用程序之间的交互非常强大,因此很确定会有办法。

标签: excel ms-access vba


【解决方案1】:

我认为这不是一个好主意,但您可以尝试类似的概念。

Sub ImportFromAccess()
   Dim conn As ADODB.Connection
   Dim myRecordset As ADODB.Recordset
   Dim strConn As String

   strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\your_path_here\Northwind.mdb"

   Set myRecordset = New ADODB.Recordset

   FocusRow = ActiveCell.Row
   With myRecordset
       .Open "SELECT * FROM PersonInformation WHERE ID=" & Worksheets("Sheet1").Range("A2").Value, _
         strConn, adOpenKeyset, adLockOptimistic
         ' This assumes that ID is a number field. If it is a text field, use
         ' .Open "SELECT * FROM PersonInformation WHERE ID='" & Worksheets("Sheet1").Range("A2").Value & "'", _
         strConn, adOpenKeyset, adLockOptimistic

      .Fields("ID").Value = Worksheets("Sheet1").Range("A" & FocusRow).Value
      .Fields("FName").Value = Worksheets("Sheet1").Range("B" & FocusRow).Value
      .Fields("LName").Value = Worksheets("Sheet1").Range("C" & FocusRow).Value
      .Fields("Address").Value = Worksheets("Sheet1").Range("D" & FocusRow).Value
      .Fields("Age").Value = Worksheets("Sheet1").Range("E" & FocusRow).Value
      .Update
      .Close
   End With
   Set myRecordset = Nothing
   Set conn = Nothing
End Sub

Sub UpdateRecordsInAccess()
    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:\your_path_here\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

【讨论】:

  • 我正在尝试您建议的方式,但是当我实现更新访问时,它显示一个错误,说明应用程序已定义或对象错误..
  • 工具 > 参考 > Microsoft Active X Data Objects 2.8 库
  • 我这样做了,但它说应用程序定义或对象错误,我发布了我目前正在处理的代码
【解决方案2】:

子 UpdateRecordsInAccess() 调暗为范围 'Dim r As Long Dim conn As ADODB.Connection 将 strConn 调暗为字符串 将 strSQL 调暗为字符串

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data  Source=C:\Users\username\Desktop\DatabaseResplann.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 Allocation SET " & _
                "Resource Name='" & Worksheets("Sheet1").Range("B" & i).Value & "', " & _
                "Child PID='" & Worksheets("Sheet1").Range("C" & i).Value & "', " & _
                "Fct wk#='" & Worksheets("Sheet1").Range("D" & i).Value & "', " & _
                "Fct Hrs='" & Worksheets("Sheet1").Range("E" & i).Value & "', " & _
                "Fct %='" & Worksheets("Sheet1").Range("F" & i).Value & "', " & _
                "Comment='" & Worksheets("Sheet1").Range("G" & i).Value & " WHERE " & _
                "Resource ID='" & Worksheets("Sheet1").Range("A" & i).Value
            conn.Execute strSQL
        'End If
        'r = r + 1
    Next i


conn.Close
Set conn = Nothing

结束子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2013-04-20
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多