Sql 使用VBA从Access中删除数据

Sql 使用VBA从Access中删除数据,sql,ms-access,vba,ms-access-2000,Sql,Ms Access,Vba,Ms Access 2000,我试图在VBA中删除当前Access数据库中的所有记录,其中OTP=txtOTP.value和VARIABLE={noadministrats,teladministrats,telecodministrats,[…]) 这是我的密码: Dim查询作为记录集 设置query=CurrentDb.Execute(“DELETE*FROM tb_SOMMAIRE WHERE OTP='”&txtOTP.value&“”,以及(变量='NoAdminContrats'或变量='TitreAdminCo

我试图在VBA中删除当前Access数据库中的所有记录,其中
OTP=txtOTP.value
VARIABLE={noadministrats,teladministrats,telecodministrats,[…])

这是我的密码:

Dim查询作为记录集
设置query=CurrentDb.Execute(“DELETE*FROM tb_SOMMAIRE WHERE OTP='”&txtOTP.value&“”,以及(变量='NoAdminContrats'或变量='TitreAdminContrats'或变量='UnitAdminContrats'或变量='AdrAdminContrats'或变量='VilleAdminContrats'或变量='TelAdminContrats'或变量='CourriedMinContrats'))
我在尝试使用OpenRecordset时遇到错误3219无效操作,或者在尝试使用Execute时遇到预期函数。我尝试了很多方法,但尚未成功使此查询工作。我的记录集中也有完整的表,使用myRecordset.Delete是否更容易/更快?如果是,我该如何操作

编辑


现在尝试使用CurrentDb.Execute而不是CurrentDb.OpenRecordset。错误现在是预期的函数,而不是无效操作。

最终成功使其工作。出于某种原因,必须为查询声明另一个变量

Dim sql作为字符串
sql=“DELETE*FROM tb_SOMMAIRE WHERE OTP='”&txtOTP.value&“AND(VARIABLE='noadministrats'或VARIABLE='titreadmincontracts'或VARIABLE='unitadministrats'或VARIABLE='adradmincontracts'或VARIABLE='teladministrats'或VARIABLE='telecadministrats'或VARIABLE='courrieadmincontracts')”
CurrentDb.executesql

您已经解决了问题。祝贺您。查看您的
WHERE
子句的不同方法是否更易于使用

WHERE
子句检查
VARIABLE
是否与值列表匹配。不必使用多个
条件将
变量
与列表中的每个成员进行比较,只需询问db引擎值列表中是否存在
变量

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

除非您希望发送
execute
函数选项和查询,否则不应在
记录集.execute
函数中使用括号

currentDB.Execute ("SQL EXECUTABLE QUERY", Options)
选项是可包含在函数中的可选常量,例如dbDenyWritedbFailOnError。如果在执行函数中不包含选项,Microsoft将使用默认的dbunconsistent,并且不应使用括号

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

当您使用变量
sql
时,代码工作的原因是您在使用变量时没有使用parantises。

对于
DELETE
语句,它不应该是
CurrentDb.Execute
。…它也不工作,带括号(
CurrentDb.Execute()
)我得到一个错误“预期函数”没有括号,我得到了一个语法错误。最后,谢谢你。我将在下面发布最终代码。由于这个答案比我的解决方法更准确,我将把它设置为可接受的答案。然而,在这一点上,标题有点误导,因为它不是VBA中特定函数的问题,而是对我来说,这是一个语法问题。任何人都可以随意编辑。谢谢你,尽管已经3年多了,哈哈。