使用VBA从Access中删除数据

时间:2012-10-09 14:34:52

标签: sql vba ms-access access-vba ms-access-2000

我正在尝试删除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')")

我在尝试使用Execute时尝试使用OpenRecordset或预期功能时出现错误3219无效操作。我已经尝试了很多东西,但我还没有管理好这个查询。我还在记录集中有完整的表,使用myRecordset.Delete更容易/更快吗?如果是这样,我怎么能这样做?

修改

现在尝试使用CurrentDb.Execute而不是CurrentDb.OpenRecordset。现在错误预期功能而不是无效操作

3 个答案:

答案 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