为清楚起见,我的表中有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
有人问我为什么不尝试查询。答案是因为我正在使用链接到我的表的表单(通过多个中间查询)。在这个表单上,我必须能够输入数据并将其添加到我的表中。如果我使用查询删除重复项,查询和表之间的关系不再一对一,所以我将无法在表单中键入信息。
我希望这是有道理的,但如果没有,请告诉我,我会很乐意进一步阐述。
答案 0 :(得分:0)
使用distinct来获取所需的行并将它们插入到新表中。重命名旧表并将其替换为新表。
答案 1 :(得分:0)
你需要使用一个记录集(因为你不能从你用查询指定的表结构中删除重复项,因为没有唯一的键来区分匹配的行,并得到一个你的必须创建一个新表):
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
我使用的语法是删除操作可能是狡猾的(抱歉,我总是使用查询来删除)