今天经过试验,总结了一条向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. ' 打开连接。
9. strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\North.mdb;Persist Security Info=False"
10. Set cnn1 = New ADODB.Connection
11. cnn1.Open strCnn
12.
13. Dim i As Long
14. Dim t1 As String, t2 As String
15. t1 = Time$()
16. cnn1.BeginTrans
17.
18. Set rstTitles = New ADODB.Recordset
19. rstTitles.LockType = adLockPessimistic '不能使用adLockBatchOptimistic或adLockReadOnly
20. rstTitles.CursorType = adOpenDynamic
21. rstTitles.Open "tab", cnn1
22.
23. For i = 1 To 10
24. rstTitles.AddNew
25. rstTitles("a") = i
26. rstTitles("b") = i
27. rstTitles.Update
28. Next i
29.
30. cnn1.CommitTrans
31.
32. rstTitles.Close
33. cnn1.Close
34.
35. t2 = Time$()
36.
37. MsgBox t1 & " " & t2
38. End Sub
先前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. ' 打开连接。
9. strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\North.mdb;Persist Security Info=False"
10. Set cnn1 = New ADODB.Connection
11. cnn1.Open strCnn
12.
13. Dim i As Long
14. Dim t1 As String, t2 As String
15. t1 = Time$()
16. cnn1.BeginTrans
17.
18. Set rstTitles = New ADODB.Recordset
19. rstTitles.LockType = adLockPessimistic '不能使用adLockBatchOptimistic或adLockReadOnly
20. rstTitles.CursorType = adOpenDynamic
21. rstTitles.Open "tab", cnn1
22.
23. For i = 1 To 10
24. rstTitles.AddNew
25. rstTitles("a") = i
26. rstTitles("b") = i
27. rstTitles.Update
28. Next i
29.
30. cnn1.CommitTrans
31.
32. rstTitles.Close
33. cnn1.Close
34.
35. t2 = Time$()
36.
37. MsgBox t1 & " " & t2
38. End Sub
1人赞
分享
二维码
赏一个