-1

为清楚起见,我的表中有 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

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

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

4

2 回答 2

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   

我在删除操作中使用的语法可能很狡猾(对不起,我总是使用查询来进行删除)

于 2012-08-17T02:59:10.413 回答
0

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

于 2012-08-16T16:53:34.167 回答