2

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

尝试使用 OpenRecordset 或使用 Execute 时出现预期函数时出现错误 3219 Invalid Operation 。我已经尝试了很多东西,但我还没有设法让这个查询工作。我在记录集中也有完整的表,使用 myRecordset.Delete 会更容易/更快吗?如果是这样,我该怎么做?

编辑

现在尝试使用 CurrentDb.Execute 而不是 CurrentDb.OpenRecordset。该错误现在是Function expected而不是Invalid Operation

4

3 回答 3

3

你已经解决了问题。恭喜。看看你的条款的不同方法是否WHERE更容易使用。

WHERE子句检查是否VARIABLE匹配值列表。您可以简单地询问数据库引擎是否存在值列表​​,而不是使用多个OR条件VARIABLE与列表的每个成员进行比较。VARIABLEIN

AND
    (
        [VARIABLE] IN
            (
                'NomAdminContrats',
                'TitreAdminContrats',
                'UnitAdminContrats',
                'AdrAdminContrats',
                'VilleAdminContrats',
                'TelAdminContrats',
                'TelecAdminContrats',
                'CourrielAdminContrats'
            )
    )
于 2012-10-09T14:58:01.223 回答
3

您不应该对recordset.execute函数使用括号,除非您想发送execute函数options以及您的查询。

currentDB.Execute ("SQL EXECUTABLE QUERY", Options)

options是可以包含在函数中的可选常量,例如dbDenyWritedbFailOnError。当您在执行函数中不包含选项时,Microsoft 使用默认的dbInconsistent,并且您不应使用括号。

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

使用变量时代码工作的原因sql是因为在使用变量时没有使用括号。

于 2015-11-19T14:04:52.393 回答
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
于 2012-10-09T14:47:23.867 回答