MS Access 2002 / MS SQL 2008 R2 - 根据特定条件删除记录的问题

时间:2015-07-17 16:47:37

标签: sql sql-server-2008 ms-access access-vba ms-access-2002

我试图让我的代码从通过表单事件链接到MS Sql 2008数据库表的Access 2002数据库表中删除记录。我只是想删除User为null且Date为null的所有记录。

这是给我带来麻烦的片段:

Dim delSQL As String

DoCmd.SetWarnings False
delSQL = "DELETE * FROM Notifications WHERE User IsNull;"
Set rst = CurrentDb.OpenRecordset(delSQL, dbOpenSnapshot)

DoCmd.RunSQL delSQL
rst.Close
Set rst = Nothing
DoCmd.SetWarnings True

老实说,我不知道为什么这不起作用。我在SQL服务器端运行上面的SQL语句(不包括Date部分,因为我想让用户标准先工作)并且它可以工作。但每次我尝试让它在VBA for Access 2002中运行时,我在执行SQL时都会收到错误。

1 个答案:

答案 0 :(得分:1)

User是保留字。将其括在方括号中,或使用表名或别名限定字段名称。

IsNull是一个功能。使用Is Null作为@AlexK。建议或使用字段名称作为IsNull()的参数。

*中的DELETE *不是必需的。如果包含Access,Access不会抛出错误。当您希望在Access查询设计器的数据表视图中预览受影响的行时,它会很有用。

delSQL = "DELETE * FROM Notifications AS n WHERE n.User Is Null"

我建议您启用SetWarnings,并使用CurrentDb.Execute dbFailOnError 执行DELETE。由于数据源是链接的SQL Server表,还包括 dbSeeChanges

DoCmd.SetWarnings True
CurrentDb.Execute delSQL, dbSeeChanges + dbFailOnError

这种方法可以让您更好地了解遇到的任何问题。