Ошибки поставщиков

Область применения: Access 2013, Office 2013

При возникновении ошибки поставщика возвращается ошибка времени выполнения -2147467259. При появлении этой ошибки проверка коллекцию Ошибок активного объекта Connection, которая будет содержать одну или несколько ошибок, описывающих случившееся.

Коллекция ошибок ADO

Так как конкретная операция ADO может вызвать несколько ошибок поставщика, ADO предоставляет коллекцию объектов ошибок через объект Connection . Эта коллекция не содержит объектов, если операция завершается успешно, и содержит один или несколько объектов Error , если что-то пошло не так и поставщик вызвал одну или несколько ошибок. Проверьте каждый отдельный объект ошибки, чтобы определить точную причину ошибки.

Завершив обработку всех возникших ошибок, можно очистить коллекцию, вызвав метод Clear . Особенно важно явно очистить коллекцию Errors , прежде чем вызывать метод Resync, UpdateBatch или CancelBatch для объекта Recordset , метод Open для объекта Connection или задать свойство Filter для объекта Recordset . Очистив коллекцию явным образом, можно убедиться, что все объекты Error в коллекции не остались после предыдущей операции.

Некоторые операции могут создавать предупреждения, а также ошибки. Предупреждения также представлены объектами Error в коллекции Errors . Когда поставщик добавляет предупреждение в коллекцию, он не создает ошибку во время выполнения. Проверьте свойство Count коллекции Errors, чтобы определить, было ли предупреждение создано определенной операцией. Если число равно одному или больше, в коллекцию добавлен объект Error . Определив, что коллекция Errors содержит ошибки или предупреждения, можно выполнить итерацию по коллекции и получить сведения о каждом из объектов Error , которые она содержит. Это демонстрируется в следующем кратком примере Visual Basic:

 
' BeginErrorHandlingVB02 
Private Function DeleteCustomer(ByVal CompanyName As String) As Long 
 On Error GoTo DeleteCustomerError 
 
 rst.Find "CompanyName='" & CompanyName & "'" 
 
DeleteCustomerError: 
 
 Dim objError As ADODB.Error 
 Dim strError As String 
 
 If cnn.Errors.Count > 0 Then 
 For Each objError In cnn.Errors 
 strError = strError & "Error #" & objError.Number & _ 
 " " & objError.Description & vbCrLf & _ 
 "NativeError: " & objError.NativeError & vbCrLf & _ 
 "SQLState: " & objError.SQLState & vbCrLf & _ 
 "Reported by: " & objError.Source & vbCrLf & _ 
 "Help file: " & objError.HelpFile & vbCrLf & _ 
 "Help Context ID: " & objError.HelpContext 
 Next 
 MsgBox strError 
 End If 
End Function 
' EndErrorHandlingVB02 

Подпрограмма обработки ошибок включает цикл For Each , который проверяет каждый объект в коллекции Errors . В этом примере он просто накапливает сообщение для отображения. В рабочей программе необходимо написать код для выполнения соответствующей задачи для каждой ошибки, например для закрытия всех открытых файлов и упорядоченного завершения работы программы.

Объект Error

Изучив объект Error , можно определить, какая ошибка произошла, и, что важнее, какое приложение или какой объект вызвал ошибку. Объект Error имеет следующие свойства:

Имя свойства

Описание

Описание

Текстовое описание возникной ошибки.

HelpContext, HelpFile

Ссылается на раздел справки и файл справки, которые содержат описание произошедшей ошибки.

NativeError

Номер ошибки для конкретного поставщика.

Number

Длинное целое число, представляющее число (указанное в errorValueEnum) возникщей ошибки.

Source

Указывает имя объекта или приложения, которые вызвали ошибку.

Sqlstate

Код ошибки из пяти символов, который поставщик возвращает в процессе выполнения инструкции SQL.

Объект ADO Error очень похож на стандартный объект Err Visual Basic. Его свойства описывают возникную ошибку. В дополнение к номеру ошибки вы также получаете два связанных фрагмента информации. Свойство NativeError содержит номер ошибки, относящийся к используемому поставщику. В предыдущем примере поставщик является поставщиком Microsoft OLE DB для SQL Server, поэтому NativeError будет содержать ошибки, характерные для SQL Server. Свойство SQLState содержит пятибуквенный код, описывающий ошибку в инструкции SQL.

Объект Error также используется при возникновении ошибок, связанных с событиями. Вы можете определить, произошла ли ошибка в процессе, который вызвал событие ADO, проверив объект Error, переданный в качестве параметра события.

Если операция, вызывающая событие, успешно завершена, параметру adStatus обработчика событий будет присвоено значение adStatusOK. С другой стороны, если операция, которая вызвала событие, была неудачной, параметру adStatus присваивается значение adStatusErrorsOccurred. В этом случае параметр pError будет содержать объект Error , описывающий ошибку.