【问题标题】:Increase speed of multiple inserts into Access DB from VBA Dictionary提高从 VBA 字典多次插入 Access DB 的速度
【发布时间】:2019-01-02 05:58:01
【问题描述】:

我正在尝试使用 VBA 字典,并且:

  • 如果新行不存在,则在数据库中插入新行
  • 如果有,请更新该行

虽然我当前的代码适用于此,但对于我可能需要更新的数千条记录,它的运行速度非常慢,而且我在此站点上找到的其他解决方案并不能真正实现我所追求的。谁能帮我实现这一目标?到目前为止,我的代码如下:

Sub UpdateDatabase(dict As Object)
Dim Conn As Object, StrSQL As String, Rs As Object
Dim hmm As ADODB.Recordset

Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "Microsoft.ACE.OLEDB.12.0"
Conn.Open "C:\XXXX\cfrv2.accdb" 

dictCount = dict.Count
counter = 0
For Each varKey In dict.Keys()
    Application.StatusBar = Str(counter) & "/" & Str(dictCount)
    counter = counter + 1
    StrSQL = "SELECT * FROM `All SAMs Backlog` WHERE [LOCID] = '" & varKey & "'"

    Set hmm = Conn.Execute(StrSQL)
    If hmm.BOF And hmm.EOF Then
        StrSQL = "INSERT INTO `ALL SAMs Backlog` ([SAM], [LOCID], [RTC Date], [CFR Status], [CFR Completed Date], [CFR On Hold Reason], [MDU], [ICWB Issue], [Obsolete]) VALUES (dict.Item(varKey)(0), '" & varKey & "', '20/12/2018', '" & dict.Item(varKey)(1) & "', '02/01/2019', '" & dict.Item(varKey)(2) & "' , '" & dict.Item(varKey)(3) & "' , '" &dict.Item(varKey)(4) & "' , '" & dict.Item(varKey)(5) & "')"
        Conn.Execute (StrSQL)
    Else
        'Update the LOC in the table
        StrSQL = "UPDATE `All SAMs Backlog` SET ([CFR Status] = '" & dict.Item(varKey)(1) & "', [CFR On Hold Reason] = '" & dict.Item(varKey)(2) & "', [MDU] = '" & dict.Item(varKey)(3) & "', [ICWB Issue] = '" & dict.Item(varKey)(4) & "', [Obsolete] = '" & dict.Item(varKey)(5) & "')"
        Conn.Execute (StrSQL)
    End If
Next

Conn.Close
End Sub

感谢任何帮助。

【问题讨论】:

  • 根据您有多少插入与更新,您可以首先运行更新并检查“受影响的记录”值,然后如果该值为零,则运行插入。 stackoverflow.com/questions/12676747/…
  • 我很惊讶代码可以正常工作。应该使用[ ] 来分隔表和字段名称,而不是撇号:[All SAMs Backlog]。如果 LocID 是公用键,你不能加入表吗?
  • Upserting in MS-access的可能重复

标签: sql vba ms-access adodb


【解决方案1】:

要么:

将字典的内容写入临时表,然后按照此处所述运行查询:

Update or insert data in table

或:

[All SAMs Backlog] 作为记录集打开,循环字典以根据需要添加编辑记录,然后关闭记录集。

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2021-11-15
    • 2013-09-30
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多