如何使用 Access VBA 删除表之间的匹配行/记录?

Posted

技术标签:

【中文标题】如何使用 Access VBA 删除表之间的匹配行/记录?【英文标题】:How to delete matching rows/records between tables using Access VBA? 【发布时间】:2021-05-06 15:21:34 【问题描述】:

我需要从一个表 (Table2) 中删除所有行(记录),这些行(记录)出现在另一个表 (Table3) 中,它们具有相同的代码(出现在“代码”列上,两个表具有相同的名称)。

我在 SQL 中找到了建议的解决方案:

DELETE Table2
FROM Table2
INNER JOIN Table3 ON Table2.Code = Table3.Code

我在 Access VBA 中的尝试。

DoCmd.RunSQL "DELETE * FROM Table2 INNER JOIN Table3 on Table2.Code = Table3.Code"

我明白了

运行时错误“指定包含要删除的记录的表”

我得到了部分工作:

DoCmd.RunSQL "DELETE * FROM Table2 WHERE Table3.Code = Table3.Code"

第二个代码打开一个弹出窗口,要求输入一个参数(我想要匹配的),它有效,但我想不输入。


解决方案:

调整 Doug Coats 提供的代码并为 Access VBA “调整”:

DoCmd.RunSQL "DELETE * FROM Table2 WHERE EXISTS ( SELECT Table3.Code FROM Table3 WHERE Table3.Code = Table2.Code )"
DoCmd.Requery

添加.Requery 以删除删除记录时出现的#Deleted。

【问题讨论】:

WHERE Table3.Code = Table3.Code 有幸存者吗? 灰胡子这个问题没看懂 我无法想象在Table3.Code 等于Table3.Code 的任何记录中,这种情况在DELETE * FROM Table2 中呈现为partially working:有没有记录在这次尝试中幸存下来? 【参考方案1】:

我通常不喜欢加入一个表来检查是否存在某些值。

尝试改用这个:

    DELETE 
    FROM Table2 t2
    WHERE EXISTS
        (
            SELECT t3.Code 
            FROM Table3 t3 
            WHERE t3.Code = t2.Code
        )

【讨论】:

谢谢,让代码工作,只需要适应 VBA,因为我知之甚少。我将使用工作代码编辑问题!

以上是关于如何使用 Access VBA 删除表之间的匹配行/记录?的主要内容,如果未能解决你的问题,请参考以下文章

VBA删除匹配数据的行

如果整行使用 VBA 匹配,则删除重复的行

Access vba:如何在两个相关表中执行插入?

VBA脚本检查MS ACCESS上是不是存在表,如果存在则删除

最后插入行的自动编号值 - MS Access / VBA

Microsoft Access 中如何删除多个表的内容?