我正在尝试删除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')")
我在尝试使用Execute时尝试使用OpenRecordset或预期功能时出现错误3219无效操作。我已经尝试了很多东西,但我还没有管理好这个查询。我还在记录集中有完整的表,使用myRecordset.Delete更容易/更快吗?如果是这样,我怎么能这样做?
修改
现在尝试使用CurrentDb.Execute而不是CurrentDb.OpenRecordset。现在错误预期功能而不是无效操作。
答案 0 :(得分:3)
你已经解决了这个问题。恭喜。查看您的WHERE
子句的不同方法是否更易于使用。
WHERE
子句检查VARIABLE
是否与值列表匹配。您可以简单地向数据库引擎询问OR
是否存在VARIABLE
值列表,而不是使用多个VARIABLE
条件来将IN
与列表的每个成员进行比较。 / p>
AND
(
[VARIABLE] IN
(
'NomAdminContrats',
'TitreAdminContrats',
'UnitAdminContrats',
'AdrAdminContrats',
'VilleAdminContrats',
'TelAdminContrats',
'TelecAdminContrats',
'CourrielAdminContrats'
)
)
答案 1 :(得分:3)
除非您要发送recordset.execute
函数选项以及查询,否则您不应该使用execute
函数的括号。
currentDB.Execute ("SQL EXECUTABLE QUERY", Options)
options 是可以包含在函数中的可选常量,例如 dbDenyWrite 或 dbFailOnError 。当您在执行函数中不包含选项时,Microsoft使用默认的 dbInconsistent ,您不应使用括号。
Set query = CurrentDb.Execute "DELETE * FROM tb_SOMMAIRE..."
使用变量sql
时代码工作的原因是因为在使用变量时没有使用parantheses。
答案 2 :(得分:0)
最终成功实现了它。由于某种原因,不得不为查询声明另一个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