2011-01-10 87 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塊中處理,然後您的子例程有一個單一的退出點,這對於將來代碼變得更復雜的情況非常有用。