在Microsoft Access應用程序,我修改刪除的消息,某些VBA函數返回的消息:記錄是在Microsoft Access VBA
"Record is Deleted"
這出現在一個消息框,沒有錯誤號和一個黃色的警告圖標。
這是不是可以通過傳統的錯誤處理捕獲一個錯誤(「上的錯誤......」。它也不會受到DoCmd.setwarnings =假
我正在尋找一些建議如何捕獲或處理該項目
在Microsoft Access應用程序,我修改刪除的消息,某些VBA函數返回的消息:記錄是在Microsoft Access VBA
"Record is Deleted"
這出現在一個消息框,沒有錯誤號和一個黃色的警告圖標。
這是不是可以通過傳統的錯誤處理捕獲一個錯誤(「上的錯誤......」。它也不會受到DoCmd.setwarnings =假
我正在尋找一些建議如何捕獲或處理該項目
「記錄被刪除」是運行時錯誤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
。這將解釋你描述的行爲。
也許你拉記錄從多個表中刪除...如
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)。