代码之家  ›  专栏  ›  技术社区  ›  apenwarr

MS Access:为什么ADODB.Recordset.BatchUpdate比Application.ImportXML慢这么多?

  •  4
  • apenwarr  · 技术社区  · 14 年前

    我在别处读到过喷气发动机不支持UpdateBatch。所以也许有更好的方法。

    有没有一种有效的方法可以将数据插入Access,而不需要编写临时文件?

    Sub TestBatchUpdate()
        CurrentDb.Execute "create table testy (x int, y int)"
    
        Dim rs As New ADODB.Recordset
        rs.CursorLocation = adUseServer
        rs.Open "testy", CurrentProject.AccessConnection, _
            adOpenStatic, adLockBatchOptimistic, adCmdTableDirect
    
        Dim n, v
        n = Array(0, 1)
        v = Array(50, 55)
    
        Debug.Print "starting loop", Time
        For i = 1 To 10000
            rs.AddNew n, v
        Next i
        Debug.Print "done loop", Time
    
        rs.UpdateBatch
        Debug.Print "done update", Time
    
        CurrentDb.Execute "drop table testy"
    End Sub
    

    1 回复  |  直到 14 年前
        1
  •  4
  •   HansUp    14 年前

    除非你必须用ADO来做这件事,否则试试DAO。以下是我笔记本电脑上的时间,以及您的程序和DAO版本:

    ADO:
    starting loop 9:51:59 PM
    done loop     9:52:00 PM
    done update   9:52:54 PM
    
    DAO:
    starting loop 9:58:29 PM
    done loop     9:58:31 PM
    done update   9:58:31 PM
    

    这是我用的刀版本。

    Sub TestBatchUpdateDAO()
    
        CurrentDb.Execute "create table testy (x int, y int)"
    
        Dim rs As DAO.Recordset
        Set rs = CurrentDb.OpenRecordset("testy", dbOpenTable, dbAppendOnly)
        Dim i As Long
    
        Debug.Print "starting loop", Time
        For i = 1 To 10000
            rs.AddNew
            rs!x = 50
            rs!y = 55
            rs.Update
        Next i
        Debug.Print "done loop", Time
    
        'rs.UpdateBatch '
        Debug.Print "done update", Time
    
        rs.Close
        Set rs = Nothing
        CurrentDb.Execute "drop table testy"
    End Sub
    
    推荐文章