【问题标题】:How can I remove duplicates in my Access table (not using queries)?如何删除 Access 表中的重复项(不使用查询)?
【发布时间】:2012-08-16 16:39:52
【问题描述】:

为清楚起见,我的表格中有 2 列。我觉得必须有一种方法可以做到这一点,但如果不做一个简单的查询,我想不出一种方法来实际做到这一点。我假设使用 VBA 来执行 UPDATE 语句并将其放入宏中,但是在做了一些研究之后,我没有想出任何特别有用的东西。我曾考虑过使用 DISTINCT,但似乎我不能在 UPDATE 语句中使用它。我应该如何解决这个问题?

编辑:抱歉,我似乎没有添加足够的信息,所以我将在此处添加。

如果我从这个开始:

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3 
    B    |    2
    A    |    1
    C    |    3

我试图以这个结束(行的顺序本身并不重要):

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3
    B    |    2

有人问我为什么不尝试用查询来做这件事。答案是因为我使用了一个链接到我的表的表单(通过多个中间查询)。在这个表格上,我必须能够输入数据并将其添加到我的表格中。如果我使用查询删除重复项,则查询和表之间的关系不再是一对一的,因此我将无法在表单中输入信息。

我希望这是有道理的,但如果没有,请告诉我,我会很乐意进一步详细说明。

【问题讨论】:

  • 需要更多细节,示例数据,不使用查询是什么意思,为什么不呢。向我们展示示例数据和预期结果。
  • 使用查询是您在数据库中做事的方式。任何涉及通过 VBA 和宏进行更新的解决方案都只是运行一堆查询的不必要的复杂方式。
  • 我编辑了我最初的帖子以回答为什么我需要使用表格以及一个示例。如果您需要更多详细信息,请告诉我。
  • 如果您想通过查询删除重复项,您将需要一个唯一的 ID。自动编号会做得很好。

标签: sql ms-access vba ms-access-2007


【解决方案1】:

你需要使用一个记录集(因为你不能从你用查询指定的表结构中删除重复项,因为没有唯一的键来区分匹配的行,并得到一个你想要的必须创建一个新表):

dim rst as new adodb.recordset
dim c1 as string
dim c2 as string
rst.open "SELECT Column1, Column2 FROM TableName ORDER BY Column1, Column2" _
    , currentproject.connection, adOpenKeyset, adLockOptimistic
restart_:
c1 = rst(0)
c2 = rst(1)
rst.movenext
do while not rst.eof
    if rst.fields(0) = c1 and rst.fields(1) = c2 then  //duplicate
        rst.delete
        rst.requery
        goto restart_
    else
        c1 = rst(0)
        c2 = rst(1)
        rst.movenext
    end if
loop   

我在删除操作中使用的语法可能不可靠(抱歉,我总是使用查询来执行删除操作)

【讨论】:

    【解决方案2】:

    使用 distinct 获取所需的行并将它们插入到新表中。重命名旧表并将其替换为新表。

    【讨论】:

    • 感谢您的回复。不幸的是,这对我的目的不起作用。我刚刚在上面提到了这一点,但是这个表是附加到一个表单上的,所以每当新的重复项被导入到表中时,这个过程就必须不断地完成。我无法每次手动添加新表、传输数据和重命名它们。我想这就是你的意思,但如果我误解了你的想法,请告诉我。
    • 不,你明白。我认为这是你需要做的一次性事情。另一个想法:将这两列设为主键,然后 Access 将不允许输入重复项。
    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2020-05-26
    • 1970-01-01
    • 2016-07-20
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多