Ошибки поставщика
При ошибке поставщика возвращается ошибка времени выполнения с кодом -2147467259. При получении этой ошибки проверьте коллекцию ошибок активного объекта Connection, который будет содержать одну или несколько ошибок, описывающих то, что произошло.
Коллекция ошибок ADO
Так как определенная операция ADO может привести к нескольким ошибкам поставщика, ADO предоставляет коллекцию объектов ошибок через объект Connection. Эта коллекция не содержит объектов, если операция завершается успешно и содержит один или несколько объектов error, если что-то пошло не так, и поставщик вызвал одну или несколько ошибок. Проверьте каждый объект ошибки, чтобы определить точную причину ошибки.
Как только вы завершили обработку любых ошибок, можно очистить коллекцию, вызвав метод Clear. Особенно важно очистить коллекцию ошибок перед вызовом метода Resync, метода UpdateBatchили метода CancelBatch на объекте Recordset, метода Open на объекте Connection или установкой свойства Filter на объекте Recordset. Явно очищая коллекцию, вы можете быть уверены, что любые объекты ошибка в коллекции не являются остатками от предыдущей операции.
Некоторые операции могут создавать предупреждения в дополнение к ошибкам. Предупреждения также представлены объектами error в коллекции 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 имеет следующие свойства:
Имя свойства | Описание |
---|---|
описание | Текстовое описание ошибки, которая произошла. |
HelpContext, HelpFile | Ссылается на раздел справки и файл справки, содержащий описание ошибки, которая произошла. |
NativeError | Номер ошибки для конкретного поставщика. |
число | Длинное целое число, обозначающее номер ошибки (указанный в ErrorValueEnum), которая произошла. |
источник | Указывает имя объекта или приложения, создающего ошибку. |
SQLState | Пятизначный код ошибки, который поставщик возвращает во время процесса инструкции SQL. |
Объект ADO Error очень похож на стандартный объект Visual Basic Err. Его свойства описывают ошибку, которая произошла. Помимо количества ошибок, вы также получаете два связанных фрагмента информации. Свойство NativeError содержит номер ошибки, характерный для используемого поставщика. В предыдущем примере поставщиком является поставщик Microsoft OLE DB для SQL Server, поэтому NativeError будет содержать ошибки, относящиеся к SQL Server. Свойство SQLState содержит пятибуквенный код, описывающий ошибку в инструкции SQL.
Ошибки Event-Related
Объект error также используется при возникновении ошибок, связанных с событиями. Вы можете определить, произошла ли ошибка в процессе, вызвавшее событие ADO, проверив объект error, переданный в качестве параметра события.
Если операция, вызывающая событие, завершается успешно, параметр adStatus обработчика событий будет установлен в значение adStatusOK. С другой стороны, если операция, вызвавшее событие, была неудачной, параметр adStatus имеет значение adStatusErrorsOccurred. В этом случае параметр pError будет содержать объект Error, описывающий ошибку.