【发布时间】:2016-04-12 17:28:02
【问题描述】:
如果用户 #1 删除了我们的 Access 2007 数据库(SQL Server ODBC 链接表)中的一条记录,其他用户可能会在该记录中显示 #Deleted#(在数据表视图表单上)。在某些情况下,这可能会导致问题,因为我的代码在表单的当前事件上运行,并且只是假设存在有效记录(或新记录)。
有没有可靠的方法来检测当前记录是否已被删除?我想将它包装在这样的函数中:
Public Function IsRecordDeleted(ByRef r As DAO.Recordset)
'what goes here?
End Function
我确实在 MSDN 的 DAO 参考中找到了 RecordStatus 属性,但该属性似乎仅在 RecordSet 配置为批量更新时才有效。当我尝试检查它的值时,我得到:运行时错误 3251 - 这种类型的对象不支持操作。
我实际上在一两年前就同样的问题在另一个论坛上发布过。给出的建议不起作用:
- DCount()
- 记录集的书签和 NoMatch
- 检查 PK 或 FK 字段中的#Deleted
【问题讨论】:
-
好问题,但我认为在当前事件中重新查询不起作用。这将导致无限循环。但是,如果我确实检测到一条已删除的记录,那么我确实必须重新查询才能解决我猜想的问题。
-
@HK1 这可能没有严格的帮助,但我总是建议在使用 db 服务器作为后端时避免使用 DAO 链接的绑定表单。使用 ADO 在服务器端而不是本地运行任何查询,并为表单编写未绑定的解决方案。
-
感谢马特的推荐。我倾向于使用 ADO 作为最后的手段。如果 DAO 和 ODBC 做我需要的事情,我想我认为不需要改变。但我意识到 ADO 通常被认为更稳定、更健壮。