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

本文介绍了一种提高向ACCESS数据库批量插入数据效率的方法。通过对比发现使用Recordset对象的AddNew方法比Connection对象的Execute方法快数倍。文章推荐使用事务处理,并提供了VB+ACCESS的测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天经过试验,总结了一条向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
<think>我们正在处理一个关于如何将Excel数据快速导入Access数据库的问题。根据提供的引用,有两种主要方法:使用导表工具(如的卢导表工具)和使用VBA编程。 引用[1]提到了一键导入工具,这种方法适合非专业用户,因为它简化了导入过程,避免了手工导入的复杂性。引用[2]则展示了使用VBA代码的方法,通过编写宏将Excel数据读取并写入Access数据库。 考虑到用户希望“快速导入”,我们需要权衡两种方法的优缺点: 1. 使用导表工具:操作简单,但可能需要安装第三方工具。 2. 使用VBA:灵活且可定制,但需要编程知识。 由于问题中没有明确用户的技术背景,我们将提供两种方法的简要步骤,并推荐工具方法作为快速解决方案,同时为有编程需求的用户提供VBA方法。 另外,注意引用[2]中的VBA代码示例,它展示了如何从Excel读取数据插入Access数据库。代码中使用了ADODB连接,并逐行插入数据。 我们还需要注意,在VBA方法中,为了提高效率,可以使用事务处理(虽然示例中没有使用)来加快大批量数据插入速度。 因此,回答将包括: 1. 使用第三方工具(以的卢导表工具为例)的步骤。 2. 使用VBA代码的步骤,并给出优化建议(如事务处理)。 同时,我们将生成相关问题,以帮助用户进一步探索。 注意:回答中引用的段落末尾需要添加引用标识,如[^1]。</think>### 如何将Excel数据快速导入Access数据库 以下提供两种高效方法,根据您的技术背景选择: #### 方法1:使用第三方工具(推荐非技术用户) 通过**的卢导表工具**实现一键导入: 1. 下载并安装导表工具(如的卢数据导入工具) 2. 选择Excel文件并指定目标Access数据库 3. 自动匹配字段类型和表结构 4. 点击"开始导入"完成数据迁移 > 优势:自动处理数据类型转换、空值处理等常见问题,避免手工导入错误[^1] #### 方法2:使用VBA编程(适合技术人员) ```vba Sub ExcelToAccess() Dim conn As Object, rs As Object Dim arrData, i As Long, j As Integer ' 读取Excel数据到数组 arrData = Range("A2").CurrentRegion.Value ' 创建数据库连接 Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ ThisWorkbook.Path & "\database.accdb" ' 创建记录集 Set rs = CreateObject("ADODB.Recordset") rs.Open "目标表名", conn, 1, 3 ' 批量插入数据 For i = 2 To UBound(arrData) ' 跳过标题行 rs.AddNew For j = 1 To rs.Fields.Count rs.Fields(j - 1) = arrData(i, j) Next j rs.Update Next i ' 关闭连接 rs.Close conn.Close MsgBox "成功导入 " & UBound(arrData) - 1 & " 条数据" End Sub ``` **优化技巧**: 1. 使用事务处理提升大文件导入速度 ```vba conn.BeginTrans ' 开始事务 For i = 2 To UBound(arrData) ' 插入代码... Next conn.CommitTrans ' 提交事务 ``` 2. 字段映射检查:`If rs.Fields(j-1).Name <> Cells(1,j) Then MsgBox "字段不匹配"` #### 注意事项 1. 确保Access字段类型与Excel数据匹配(文本/数字/日期) 2. 提前清理Access目标表避免主键冲突 3. 使用`CurrentRegion`属性可自动识别连续数据区域 4. 64位系统需启用"Microsoft ActiveX Data Objects"引用
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值