Ошибки ADO Run-Time
Ошибки ADO передаются в программу в качестве ошибок во время выполнения. Можно использовать механизм перехвата ошибок в языке программирования для их перехвата и обработки. Например, в Visual Basic используйте инструкцию On Error. В Visual C++он зависит от метода, используемого для доступа к библиотекам ADO. С помощью #import используйте блок try-catch . В противном случае программисты C++ должны явно получить объект ошибки, вызвав GetErrorInfo. В следующей подпроцедуре Visual Basic демонстрируется отлов ошибки ADO:
' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError
'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider=sqloledb;" & _
"Data Source=a-iresmi2000;" & _
"Initial Catalog=Northwind;Integrated Security=SSPI"
' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn
' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn
' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn
Exit Sub
' Error handler
FormLoadError:
Dim strErr As String
Select Case Err
Case adErrObjectOpen
strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
strErr = strErr & "Topic ID: " & Err.HelpContext
MsgBox strErr
Debug.Print strErr
Err.Clear
Resume Next
' If some other error occurs that
' has nothing to do with ADO, show
' the number and description and exit.
Case Else
strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
MsgBox strErr
Debug.Print strErr
Unload Me
End Select
End Sub
' EndErrorHandlingVB01
Эта процедура события Form_Load намеренно создает ошибку, пытаясь открыть тот же объект Connection дважды. Во второй раз вызывается метод Open, обработчик ошибок активируется. В этом случае ошибка имеет тип adErrObjectOpen, поэтому обработчик ошибок отображает следующее сообщение перед возобновлением выполнения программы:
Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705
Сообщение об ошибке содержит каждую часть информации, предоставляемую объектом Visual Basic Err, за исключением значения lastDLLError, которое не применяется здесь. Номер ошибки указывает, какая ошибка произошла. Описание полезно в случаях, когда вы не хотите обрабатывать ошибку самостоятельно. Его можно просто передать пользователю. Хотя обычно вы хотите использовать сообщения, настроенные для приложения, вы не можете ожидать каждой ошибки; Описание дает некоторое представление о том, что пошло не так. В примере кода сообщение об ошибке было сообщено объектом Connection. Здесь вы увидите тип объекта или программный идентификатор, а не имя переменной.
Заметка
Объект Visual Basic Err содержит только сведения об последней ошибке. Коллекция ошибок ADO объекта подключения содержит один объект Error для каждой ошибки, вызванной последней операцией ADO. Используйте коллекцию Errors вместо объекта Err для обработки нескольких ошибок. Дополнительные сведения о коллекции ошибок см. в ошибок поставщика. Однако, если допустимый объект Connection отсутствует, объект Err является единственным источником сведений об ошибках ADO.
Какие виды операций, скорее всего, вызывают ошибки ADO? Распространенные ошибки ADO могут включать открытие объекта, например connection или Recordset, попытку обновить данные или вызвать метод или свойство, которое не поддерживается поставщиком.
Ошибки OLE DB также можно передать приложению в виде ошибок во время выполнения в коллекции ошибок.
В следующем разделе приведены дополнительные сведения об ошибках ADO.