我正在尝试从 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 时出现错误 3219 无效操作,或者在尝试执行时收到预期函数时出现错误。我已经尝试了很多事情,但我还没有设法让这个查询工作。我在记录集中也有完整的表,使用 myRecordset.Delete 会更容易/更快吗?如果是这样,我该怎么做?
编辑
现在尝试使用 CurrentDb.Execute 而不是 CurrentDb.OpenRecordset。错误现在是预期功能,而不是无效操作。
您不应该对recordset.execute
函数使用括号,除非您要发送execute
函数选项以及查询。
currentDB.Execute ("SQL EXECUTABLE QUERY", Options)
options 是可以包含在函数中的可选常量,例如 dbDenyWrite 或 dbFailOnError。 当您不在执行函数中包含选项时,Microsoft将使用默认的 dbInconsistent,并且不应使用括号。
Set query = CurrentDb.Execute "DELETE * FROM tb_SOMMAIRE..."
使用变量 sql
时代码工作的原因是您在使用变量时没有使用参数。
你已经解决了这个问题。 祝贺。 查看WHERE
子句的不同方法是否更易于使用。
WHERE
子句检查VARIABLE
是否与值列表匹配。 无需使用多个OR
条件将VARIABLE
与列表中的每个成员进行比较,只需询问数据库引擎值列表中是否存在VARIABLE
IN
即可。
AND
(
[VARIABLE] IN
(
'NomAdminContrats',
'TitreAdminContrats',
'UnitAdminContrats',
'AdrAdminContrats',
'VilleAdminContrats',
'TelAdminContrats',
'TelecAdminContrats',
'CourrielAdminContrats'
)
)
终于设法让它工作了。由于某种原因,不得不为查询声明另一个变量。
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