【问题标题】:MS Access 2002 / MS SQL 2008 R2 - Problems deleting records based on certain criteriaMS Access 2002 / MS SQL 2008 R2 - 根据某些条件删除记录时出现问题
【发布时间】:2015-10-07 11:15:29
【问题描述】:

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

这是给我带来麻烦的sn-p:

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 部分,因为我想让用户条件首先工作)并且它工作正常。但是每次我尝试让它在 Access 2002 的 VBA 中运行时,在执行 SQL 时都会出错。

【问题讨论】:

  • IS NULL 不是 ISNULL 并删除 *
  • 完成但仍然无法正常工作。我仍然收到无效操作错误。
  • 这个问题还没有解决吗?如果是这样,请帮助我们了解您还需要什么。谢谢。
  • 嗨 HansUp,您刚才回答了这个问题(参见您之前在 7 月 17 日发布的帖子)

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


【解决方案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

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

【讨论】:

  • 试过了,但还是报错。我将字段名称从用户更改为 KUser。在查询表达式“n.KUser IsNull”中返回语法错误(缺少运算符)
  • 好的,它回来说我在使用这个时必须使用 dbSeeChangers 选项的错误
  • 仍然没有骰子。这真的很奇怪。它应该工作
  • 它正在工作!我把我的 rst.close 留在了那里,它正在发疯。非常感谢 HansUp!我用的是逗号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多