2011-01-10 129 views
0

我有一个Access数据库前端,我试图在窗体上放一个按钮来删除当前记录。我用下面的VBA代码删除的记录:尝试删除记录时出现错误2501

If Me.NewRecord Then 
    Me.Undo 
    Exit Sub 
End If 

DoCmd.RunCommand acCmdDeleteRecord 

Me.Requery 
Me.Refresh 

当我在我插入与形式的数据库记录运行它,它在返回的DoCmd运行时错误“2501”。但是,如果我在已经存在于数据库中的记录上运行它,则代码将按预期完成。

此外,没有其他人正在访问此数据库表,我只打开了一个窗体。

当我在访问时手动从链接表中删除它们时,我得到了同样的错误,但是我可以使用SQL Server Management Studio从数据库中删除它们。

什么会导致这种情况发生?

编辑

我做更多的一些调查,发现我无法在使用访问无论是基表编辑新的记录。我收到有关其他用户正在更改的记录的错误。

+0

你有唯一的钥匙吗?如果您删除并重新创建链接,是否也有同样的问题? – Fionnuala 2011-01-10 20:00:07

+0

该表完全用好的主键定义。 我试图重新链接表,我仍然有同样的问题。 – Rister 2011-01-11 14:02:32

回答

1

除了建议在表中有一个时间戳字段(SSMA助手将它添加到所有表中,当您使用它从Access升级时,它绝对是我推荐的),我对你的代码有一些批评。我会这样写:

If Me.NewRecord Then 
    Me.Undo 
    Else 
    DoCmd.RunCommand acCmdDeleteRecord 
    Me.Requery 
    End If 

因为您已经拥有最新的数据,刷新在重新查询后是多余的。

使用Exit Sub有助于在不相互排斥的事情上保护子句,但在这种情况下,您有一个/或 - 要么删除现有记录,要么撤消新记录。这可以在单个If/Then/Else块中处理,然后您的子例程有一个单一的退出点,这对于将来代码变得更复杂的情况非常有用。