Шаг 31 - Объект Error

Описание
Объект 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, чтобы получить подробные сведения о каждой ошибке, включая следующие:

  1. Свойство Description содержит текст сообщения об ошибке, которое будет выведено на экран, если ошибка не перехватывается.
  2. Свойство Number содержит значение типа Long, представляющее код ошибки.
  3. Свойство Source указывает объект, в котором возникла ошибка. Это особенно полезно, если в семействе Errors появляется несколько объектов Error в результате обращения к источнику данных ODBC.
  4. Свойства HelpFile и HelpContext указывают файл справочной системы Microsoft Windows и раздел справки (если они существуют), соответствующие ошибке.

Если при программировании на языке 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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.