2013-08-07 79 views
2

在Microsoft Access應用程序,我修改刪除的消息,某些VBA函數返回的消息:記錄是在Microsoft Access VBA

"Record is Deleted" 

這出現在一個消息框,沒有錯誤號和一個黃色的警告圖標。

這是不是可以通過傳統的錯誤處理捕獲一個錯誤(「上的錯誤......」。它也不會受到DoCmd.setwarnings =假

我正在尋找一些建議如何捕獲或處理該項目

回答

2

「記錄被刪除」是運行時錯誤3167,它可以使用普通On Error處理這可以通過VBA代碼來驗證像下面困:。

Sub foo() 
Dim cdb As DAO.Database, rst As DAO.Recordset 
Set cdb = CurrentDb 
Set rst = cdb.OpenRecordset("SELECT * FROM Table1 WHERE ID=26", dbOpenDynaset) 
MsgBox "Waiting..." 
On Error GoTo foo_Error 
Debug.Print rst!ID 
On Error GoTo 0 
rst.Close 
Set rst = Nothing 
Set cdb = Nothing 
Exit Sub 
foo_Error: 
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly, "Trapped Error" 
End Sub 

如果您運行該代碼,然後「刪除該記錄從下面出來「,而MsgBox顯示引用觸發運行時錯誤3167和On Error捕獲它。

檢查您的代碼,看看是否存在活動的On Error(可能在先前的調用過程中聲明)僅將MsgBox顯示爲Err.Description。這將解釋你描述的行爲。

1

也許你拉記錄從多個表中刪除...如

sql = "SELECT columnA FROM tableA WHERE criteria" 
set rec = currentdb.openrecordset(sql) 

DoCmd.SetWarnings False 
    DoCmd.RunSQL "DELETE FROM tableA WHERE columnA = " & rec(0) 
    DoCmd.RunSQL "DELETE FROM tableB WHERE columnB = " & rec(0) 
    DoCmd.RunSQL "DELETE FROM tableC WHERE columnC = " & rec(0) 
    DoCmd.RunSQL "UPDATE tableD SET status WHERE columnD = " & rec(0) 
DoCmd.SetWarnings True 

這將在第二刪除行失敗,因爲REC(0)不再在第二行存在,你只是刪除它來自於你的記錄集來自的tableA。

然而,

DoCmd.SetWarnings False 
    DoCmd.RunSQL "DELETE FROM tableB WHERE columnB = " & rec(0) 
    DoCmd.RunSQL "DELETE FROM tableC WHERE columnC = " & rec(0) 
    DoCmd.RunSQL "UPDATE tableD SET status WHERE columnD = " & rec(0) 
    DoCmd.RunSQL "DELETE FROM tableA WHERE columnA = " & rec(0) 
DoCmd.SetWarnings True 

會工作。它可能不是最好的練習方法,但是如果你有這個錯誤,試試看看被刪除的記錄集是否是原因。

一個更好的方法可能是聲明一個變量並將rec(0).value賦值給該變量。然後在代碼中使用該變量代替rec(0)。