Microsoft Access VBA中记录已删除邮件

时间:2013-08-07 00:38:10

标签: ms-access access-vba

在我正在修改的Microsoft Access应用程序中,某些vba函数会返回消息:

"Record is Deleted"  

此消息显示在消息框中,没有错误编号和黄色警告图标。

这不是传统错误处理可以捕获的错误(“出错时......”。它也不受DoCmd.setwarnings = false

的影响

我正在寻找关于如何捕获或处理此项目的一些建议。

2 个答案:

答案 0 :(得分: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时“从其下删除记录”,那么rst!中的Debug.Print引用会触发运行时错误3167而On Error抓住了它。

检查您的代码以查看是否存在活动的On Error(可能在之前的调用过程中声明),只显示带有MsgBox的普通Err.Description。这可以解释你描述的行为。

答案 1 :(得分: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)。