使用 VBA 从 Access 中删除数据
Posted
技术标签:
【中文标题】使用 VBA 从 Access 中删除数据【英文标题】:Deleting data from Access with VBA 【发布时间】:2012-10-09 14:34:52 【问题描述】:我正在尝试从 VBA 中的当前 Access 数据库中删除 OTP = txtOTP.value
和 VARIABLE = 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 是可以包含在函数中的可选常量,例如 dbDenyWrite 或 dbFailOnError。当您在执行函数中不包含 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 表中的值匹配的 Excel 行