ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 沉默的流星

[求助] 五万行excel 数据导入ACCESS,需要半小时,如何提速?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-18 19:41 | 显示全部楼层
  1. Sub 插入数据()

  2. Dim tt
  3.     tt = Timer
  4.     Dim cnn As Object, rs As Object, SQL$
  5.     Dim arr, i&, s$, s2$, t$
  6.     arr = Range("A1", [iv1].End(1))
  7.     For i = 1 To UBound(arr, 2)
  8.         If arr(1, i) <> "姓名" And arr(1, i) <> "手机" Then
  9.             s = s & ",last(" & arr(1, i) & ") as " & arr(1, i)
  10.             s2 = s2 & ",a." & arr(1, i) & "=b." & arr(1, i)
  11.         Else
  12.             s = s & "," & arr(1, i)
  13.         End If
  14.     Next

  15. '下面临时表,过度一下
  16.     Set cnn = CreateObject("adodb.connection")
  17.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\通讯录.mdb"
  18.       
  19.     SQL = "select " & Mid(s, 2) & " from [Excel 8.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" & [a1].CurrentRegion.Address(0, 0) & "] group by 姓名,手机"
  20.     SQL = "insert into temp " & SQL
  21.     cnn.Execute SQL '把工作表中不重复记录(相同记录取最后的)导入到临时表
  22.    
  23.   '下面是临时表的数据添加或者追加到通讯录---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  24.     SQL = "update 通讯录 a,temp b set " & Mid(s2, 2) & " where a.姓名=b.姓名 and a.手机=b.手机"
  25.     cnn.Execute SQL '不判断,更新可能存在的姓名和手机记录
  26.     SQL = "select a.* from (select " & Mid(s, 2) & " from temp group by 姓名,手机) a  left join 通讯录 b on a.姓名=b.姓名 and a.手机=b.手机  where b.姓名 is null"
  27.     Set rs = CreateObject("adodb.recordset")
  28.     rs.Open SQL, cnn, 1, 3
  29.     If rs.RecordCount Then
  30.         SQL = "insert into 通讯录 " & SQL
  31.         cnn.Execute SQL
  32.         MsgBox rs.RecordCount & "行数据已经添加到数据库!用时" & Timer - tt & "秒", vbInformation
  33.     Else
  34.          MsgBox "工作表的数据数据库中已经存在。", vbInformation
  35.     End If
  36.    
  37.     SQL = "delete from temp"
  38.     cnn.Execute SQL '最后删除临时表中的记录
  39.     rs.Close
  40.     cnn.Close
  41.     Set rs = Nothing
  42.     Set cnn = Nothing
  43. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-4-18 19:46 | 显示全部楼层
临时表不需要ID号,删除它:
access数据上传.rar (1.97 MB, 下载次数: 188)

还可以考虑临时工作表,或在原工作表上面生成一个不重复数据区域,再导入到数据库,而不在数据库中创建一个多余的临时数据表

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-18 20:44 | 显示全部楼层
老师:您说得对,您的建议“临时工作表”,我会考虑的,下面还有一个问题想问您。

您看看下面这一语句对不对啊?我想加一个条件,要求“工作单位”是“EXCEL HOME”
SQL = "select " & Mid(s, 2) & " from [Excel 8.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" & [a1].CurrentRegion.Address(0, 0) & "] group by 姓名,手机 where 工作单位='EXCEL HOME'

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-18 20:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师:您的数据导入到临时表的时候,为什么,数据顺序是乱的啊???

TA的精华主题

TA的得分主题

发表于 2013-4-18 21:25 | 显示全部楼层
沉默的流星 发表于 2013-4-18 20:54
老师:您的数据导入到临时表的时候,为什么,数据顺序是乱的啊???

数据库没有行号概念,插入的数据总会以某个字段排序

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-18 21:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师:您看看下面这一语句对不对啊?我想加一个条件,要求“工作单位”是“EXCEL HOME”
SQL = "select " & Mid(s, 2) & " from [Excel 8.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" & [a1].CurrentRegion.Address(0, 0) & "] group by 姓名,手机 where 工作单位='EXCEL HOME'  "

TA的精华主题

TA的得分主题

发表于 2013-4-18 22:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
沉默的流星 发表于 2013-4-18 21:34
老师:您看看下面这一语句对不对啊?我想加一个条件,要求“工作单位”是“EXCEL HOME”
SQL = "select " & ...

顺序错误
  1. SQL = "select " & Mid(s, 2) & " from [Excel 8.0;Database=" & ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" & [a1].CurrentRegion.Address(0, 0) & "] where 工作单位='EXCEL HOME' group by 姓名,手机"
复制代码

TA的精华主题

TA的得分主题

发表于 2013-4-18 22:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-19 03:06 | 显示全部楼层
老师:
    真的很感激您!这么多天的耐心讲解,让我受益匪浅,也让我深深的感到,要学习的东西太多了。但是由您相伴,我想我会坚持的。很高兴,我把向您请教的都用到了工作中,特别是最后一句where的位置,我试了好多,都没通过,但是您的一个点拨,我居然完成了,好开心啊!
      真的希望您一直伴着我们这些需要帮组的人,再一次对您表示深深的感激和敬意!
      下次如果有不懂的还来找您啊,呵呵

TA的精华主题

TA的得分主题

发表于 2013-4-19 08:23 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-29 08:14 , Processed in 0.046334 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表