错误收集 (DAO)

适用于:Access 2013、Office 2013

Errors 集合包含所有存储的 Error 对象,这些对象中的每一个都与一个涉及 DAO 的操作有关。

备注

任何涉及 DAO 对象的操作都可以生成一个或多个错误。 每个错误发生时,系统会将一个或多个 Error 对象放在 DBEngine 对象的 Errors 集合中。 当另一个 DAO 操作生成错误时,将清除 Errors 集合,并将一组新的 Error 对象放在 Errors 集合中。 Errors 集合中编号最高的对象 (DBEngine.Errors.Count - 1) 对应于由 Microsoft Visual Basic for Applications (VBA) 的 Err 对象报告的错误。

不生成错误的 DAO 操作对 Errors 集合没有影响。

与其他集合的通常做法不同, Errors 集合中不会追加元素,因此 Errors 集合不支持 AppendDelete 方法。

Errors 集合中的 Error 对象集描述一个错误。 第一个 Error 对象是最低级别的错误,第二个对象是更高一个级别的错误,依此类推。 例如,如果在尝试打开 Recordset 对象时发生了 ODBC 错误,则第一个错误对象包含最低级别的 ODBC 错误;随后的错误包含由 ODBC 的各个层返回的 ODBC 错误。 在这种情况下,ODBC 驱动程序管理器(且有可能是驱动程序本身)将返回不同的 Error 对象。 最后一个 Error 对象包含 DAO 错误,该错误指示无法打开对象。

通过枚举 Errors 集合中的特定错误,您的错误处理例程可以更精确地确定错误的原因和根源,并采取相应的步骤进行恢复。

注意

[!注释] 如果使用 New 关键字创建的对象会在放入 Errors 集合之前或在放入的过程中导致一个错误,则集合不会包含有关该对象的错误信息,因为新对象并不与 DBEngine 对象关联。 但是,VBA Err 对象中包含错误信息。

示例

以下示例强制生成一个错误,然后捕获错误,并显示生成的 Error 对象的 DescriptionNumberSourceHelpContextHelpFile 属性。

Sub DescriptionX() 
 
 Dim dbsTest As Database 
 
 On Error GoTo ErrorHandler 
 
 ' Intentionally trigger an error. 
 Set dbsTest = OpenDatabase("NoDatabase") 
 
 Exit Sub 
 
ErrorHandler: 
 Dim strError As String 
 Dim errLoop As Error 
 
 ' Enumerate Errors collection and display properties of 
 ' each Error object. 
 For Each errLoop In Errors 
 With errLoop 
 strError = _ 
 "Error #" & .Number & vbCr 
 strError = strError & _ 
 " " & .Description & vbCr 
 strError = strError & _ 
 " (Source: " & .Source & ")" & vbCr 
 strError = strError & _ 
 "Press F1 to see topic " & .HelpContext & vbCr 
 strError = strError & _ 
 " in the file " & .HelpFile & "." 
 End With 
 MsgBox strError 
 Next 
 
 Resume Next 
 
End Sub