Описание
Объект Error содержит подробные сведения об ошибках доступа к данным, каждая из которых относится к определенной операции с объектом доступа к данным (DAO).
Замечания
Любая операция с участием объектов доступа к данным может привести к возникновению одной или нескольких ошибок. Например, вызов сервера ODBC может привести к ошибке сервера базы данных, к ошибке ODBC или к ошибке DAO. При возникновении каждой такой ошибки объект Error помещается в семейство Errors объекта DBEngine. Таким образом, результатом одного события может оказаться появление нескольких объектов Error в семействе Errors.
При возникновении ошибки в другой операции с объектами доступа к данным семейство Errors очищается и в него помещается новый объект Error. Операции DAO, в которых ошибки не возникают, не оказывают влияния на семейство Errors.
Набор объектов Error в семействе Errors описывает одну ошибку. Первый объект Error представляет ошибку низшего уровня (исходную ошибку), второй объект ошибку следующего уровня и т.д. Например, если ошибка ODBC возникает при попытке открыть объект Recordset, то первый объект Error — Errors(0) — содержит ошибку ODBC низшего уровня; следующие объекты-ошибки содержат ошибки ODBC, возвращаемые со следующих уровней программного обеспечения ODBC. В подобном случае диспетчер драйвера ODBC и, возможно, сам драйвер возвращают отдельные объекты Error. Последний объект Error — Errors.Count-1 — содержит ошибку DAO, указывающую невозможность открытия объекта.
Просмотр сведений о конкретных ошибках в семействе Errors позволяет более точно определить в программах обработки ошибок причину и источник каждой ошибки и принять соответствующие меры для исправления ситуации. Как в рабочей области Microsoft Jet, так и в рабочей области ODBCDirect пользователь имеет возможность читать значения свойств Error, чтобы получить подробные сведения о каждой ошибке, включая следующие:
Если при программировании на языке Microsoft Visual Basic для приложений (VBA) ключевое слово New было использовано при создании объекта, ставшего источником ошибки до своего добавления в семейство, то семейство Errors объекта DBEngine не будет содержать ошибку, соответствующую этому объекту, поскольку еще не установлена связь этого объекта с объектом DBEngine. Однако сведения об этой ошибке будут доступны в объекте Err VBA.
В программах обработки ошибок на языке VBA следует проверять семейство Errors во всех случаях, когда возможно возникновение ошибки доступа к данным. При создании централизованной программы обработки ошибок следует проверять значение объекта Err VBA, чтобы определить, является ли применимой к конкретной ошибке информация, содержащаяся в семействе Errors. Если значение свойства Number последнего элемента семейства Errors (с номером DBEngine.Errors.Count - 1) и значение объекта Err совпадают, можно использовать набор инструкций Select Case для идентификации конкретной ошибки или ошибок объектов доступа к данным. Если эти значения не совпадают, следует вызвать метод Refresh для семейства Errors.
Пример
Следующая программа создает ошибку, перехватывает ее и отображает свойства Description, Number, Source, HelpContext и HelpFile результирующего объекта Error.
Sub DescriptionX() Dim dbsTest As Database On Error GoTo ОбработчикОшибок ' Преднамеренно генерирует ошибку. Set dbsTest = OpenDatabase("NoDatabase") Exit Sub ОбработчикОшибок: Dim strError As String Dim errLoop As Error ' Отображает семейство Errors и отображает свойства ' каждого объекта Error. For Each errLoop In Errors With errLoop strError = "Ошибка #" & .Number & vbCr strError = strError & " " & .Description & vbCr strError = strError & " (Источник: " & .Source & ")" & vbCr strError = strError & "Нажмите F1 для вызова раздела " & .HelpContext & vbCr strError = strError & " из файла " & .HelpFile & "." End With MsgBox strError Next Resume Next End Sub