使用 VBA 从 Access 中删除数据

Posted

技术标签:

【中文标题】使用 VBA 从 Access 中删除数据【英文标题】:Deleting data from Access with VBA 【发布时间】:2012-10-09 14:34:52 【问题描述】:

我正在尝试从 VBA 中的当前 Access 数据库中删除 OTP = txtOTP.valueVARIABLE = NomAdminContrats,TelAdminContrats,TelecAdminContrats, [...] 中的每条记录

这是我的代码:

Dim query As Recordset 
Set query = CurrentDb.Execute("DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or  VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')")

我在尝试使用 OpenRecordset 或 Expected function 时遇到错误 3219 Invalid Operation。我已经尝试了很多东西,但我还没有设法让这个查询工作。我在记录集中也有完整的表,使用 myRecordset.Delete 会更容易/更快吗?如果是这样,我该怎么做?

编辑

现在尝试使用 CurrentDb.Execute 而不是 CurrentDb.OpenRecordset。该错误现在是 Function expected 而不是 Invalid Operation

【问题讨论】:

不应该是CurrentDb.Execute,对于DELETE 声明吗?... 它也不起作用,带括号 (CurrentDb.Execute()) 我得到一个错误“预期的功能”,没有括号我得到一个语法错误。 终于成功了,谢谢。我将在下面发布最终代码。 【参考方案1】:

您不应该对recordset.execute 函数使用括号,除非您想发送execute 函数选项 以及您的查询。

currentDB.Execute ("SQL EXECUTABLE QUERY", Options)

options 是可以包含在函数中的可选常量,例如 dbDenyWritedbFailOnError。当您在执行函数中不包含 options 时,Microsoft 使用默认的 dbInconsistent,并且您不应使用括号。

Set query = CurrentDb.Execute "DELETE * FROM tb_SOMMAIRE..."

您的代码在使用变量sql 时起作用的原因是因为您在使用变量时没有使用括号。

【讨论】:

由于此答案比我的解决方法更准确,因此我将其设置为接受的答案。但是,在这一点上,标题有点误导,因为这不是 VBA 中特定函数的问题,而是我的语法问题。任何人都可以随意编辑。谢谢,虽然它已经超过 3 年了,哈哈。【参考方案2】:

你已经解决了这个问题。恭喜。看看你的WHERE 子句的不同方法是否更容易使用。

WHERE 子句检查VARIABLE 是否与值列表匹配。无需使用多个OR 条件来比较VARIABLE 与列表中的每个成员,您可以简单地询问数据库引擎VARIABLE 是否存在IN 值列表。

AND
    (
        [VARIABLE] IN
            (
                'NomAdminContrats',
                'TitreAdminContrats',
                'UnitAdminContrats',
                'AdrAdminContrats',
                'VilleAdminContrats',
                'TelAdminContrats',
                'TelecAdminContrats',
                'CourrielAdminContrats'
            )
    )

【讨论】:

【参考方案3】:

终于成功了。由于某种原因,不得不为查询声明另一个 var。

Dim sql as String
sql = "DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or  VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')"
CurrentDb.Execute sql

【讨论】:

以上是关于使用 VBA 从 Access 中删除数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 VBA 将查询从 Access 导入 Excel 并删除单个单元格

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

Access VBA:删除单元格值与 Access 表中的值匹配的 Excel 行

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

Access vba:如何打开系统消息或提示?

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