【问题标题】:Fastest way for duplicates remove in Access DB在 Access DB 中删除重复项的最快方法
【发布时间】:2018-05-07 09:24:00
【问题描述】:

我从 Excel VBA 模式管理 Access MDB 文件,并希望找到最快的方法来删除数百万行文件中的重复记录(备忘录类型,最大字符串长度约为 400 个符号)。

子访问数据库() 将 db_file 调暗为字符串 将 cn 调暗为 ADODB.Connection 暗淡 rs 作为 ADODB.Recordset db_file = "c:\文件\" db_file = db_file & "accdb.mdb" 设置 cn = New ADODB.Connection cn.ConnectionString = _ “提供者=Microsoft.Ace.OLEDB.12.0;” &_ "数据源=" & db_file & ";" &_ “持久安全信息=假” cn.Open '重复删除--------------------------------- 设置 rs = cn.Execute("SELECT Base, count(*)" & _ “从 AccessBase GROUP BY Base HAVING count(*) > 1”) cn.Execute("设置行数 1;" &_ “从 AccessBase 中删除 Base = rs.Fields(0)”) '---------------------------------------------------- ---- cn.关闭 结束子

一张表(“AccessBase”)中只有一列(“Base”)。 我试图删除duplicates delete 块中的重复字符串,但我猜有一些错误。

【问题讨论】:

  • 为什么你发布的代码没有删除重复的逻辑?
  • 感谢 Vityata 的链接,但我不知道如何将 SQL 请求添加到我的 VBA 代码中。
  • @nicomp - 你的意思是我应该尝试添加一些对我不起作用的 sql 请求?
  • @FL.Alx - 在Set rs = cn.Execute("SELECT COUNT (Base) FROM AccessBase") 部分中写入重复主题的 SQL。

标签: sql vba ms-access


【解决方案1】:

duplicates delete 块中使用单个查询,而不是一次使用两个查询

cn.Execute ("Delete from AccessBase where Base IN (SELECT Base FROM AccessBase GROUP BY base HAVING count(*) > 1)")

【讨论】:

  • 感谢您的帮助,但我收到了Run-Time Error '-2147217887 (80040e21)' Multiple-Step Operation Generated Errors
  • 请注意,这将删除 所有 个重复项 - 我想目标是保留每个重复项的一个实例。
  • @Andre - 谢谢,我也猜到了,因为SELECT Base FROM AccessBase GROUP BY base HAVING count(*) > 1) = 字符串值和计数。
猜你喜欢
  • 2016-09-06
  • 2010-12-13
  • 2017-10-18
  • 2015-10-07
  • 2012-12-20
  • 1970-01-01
  • 2015-11-27
  • 2014-05-20
相关资源
最近更新 更多