如何使用 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 删除表之间的匹配行/记录?的主要内容,如果未能解决你的问题,请参考以下文章