向ACCESS大批量快速插入数据的方法

 

今天经过试验,总结了一条向ACCESS大批量插入数据时比较快捷的方法.

先前VC程序中使用connection执行insert语句向ACCESS中插入数据,效率奇慢无比.今天测试结果表明:

同等数据量时,  rs.addnew比connection.execute(insert)要高N倍.

另,建议使用事务机制处理数据.
将connection.BeginTrans和connection.CommitTrans配合rs.addnew使用,
VB+ACCESS试验数据表明,一百万条新数据插入,仅需要一分多钟,使用connection.execute更新十万条数据时需要三五分钟.不使用事务应该会更久(根据先前经验,未测试).
需要注意的是,使用rs.addnew时,rs的LockType不能使用adLockBatchOptimistic或adLockReadOnly,否则会报错

=========================================================
测试代码如下:

  1. Private Sub Command1_Click()
  2. Dim cnn1 As ADODB.Connection
  3.    Dim rstTitles As ADODB.Recordset
  4.    Dim strCnn As String
  5.    Dim strTitle As String
  6.    Dim strMessage As String
  7.    ' 打开连接。
  8.    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Documents and Settings/桌面/新建 Microsoft Office Access 应用程序.mdb;Persist Security Info=False"
  9.    Set cnn1 = New ADODB.Connection
  10.    cnn1.Open strCnn
  11.    
  12.    Dim i As Long
  13.    Dim t1 As String, t2 As String
  14.    t1 = Time$()
  15.    cnn1.BeginTrans
  16.    
  17.    Set rstTitles = New ADODB.Recordset
  18.    rstTitles.LockType = adLockPessimistic '不能使用adLockBatchOptimistic或adLockReadOnly
  19.    rstTitles.CursorType = adOpenDynamic
  20.     rstTitles.Open "tab", cnn1
  21.     
  22.    For i = 1 To 10
  23.     rstTitles.AddNew
  24.     rstTitles("a") = i
  25.     rstTitles("b") = i
  26.     rstTitles.Update
  27.    Next i
  28.     cnn1.CommitTrans
  29.     
  30.    rstTitles.Close
  31.    cnn1.Close
  32.    
  33.    t2 = Time$()
  34.    
  35.    MsgBox t1 & "   " & t2
  36. End Sub
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值