1

我试图让我的代码从通过表单事件链接到 MS Sql 2008 数据库表的 access 2002 数据库表中删除记录。我只是希望它删除用户为空且日期为空的所有记录。

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

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 时都会出错。

4

1 回答 1

1

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

IsNull是一个函数。要么Is Null用作@AlexK。建议或使用字段名称作为IsNull().

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

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

我建议你离开SetWarnings,并使用CurrentDb.ExecutedbFailOnError执行DELETE. 由于数据源是链接的 SQL Server 表,因此还包括dbSeeChanges

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

该方法将为您提供有关遇到的任何问题的更好信息。

于 2015-07-17T17:14:14.560 回答