Errores de tiempo de ejecución de ADO
Los errores de ADO se notifican al programa como errores en tiempo de ejecución. Puede usar el mecanismo de captura de errores del lenguaje de programación para interceptarlos y controlarlos. Por ejemplo, en Visual Basic, use la instrucción On Error. En Visual C++, depende del método que use para acceder a las bibliotecas de ADO. Con #import, use un bloque try-catch. De lo contrario, los programadores de C++ deben recuperar explícitamente el objeto de error mediante una llamada a GetErrorInfo. En el siguiente sub-procedimiento de Visual Basic se muestra la captura de un error de 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
Este procedimiento de evento Form_Load crea intencionadamente un error intentando abrir dos veces el mismo objeto Connection. La segunda vez que se llama al método Open, se activa el controlador de errores. En este caso, el error es de tipo adErrObjectOpen, por lo que el controlador de errores muestra el siguiente mensaje antes de reanudar la ejecución del programa:
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
El mensaje de error incluye cada fragmento de información que proporciona el objeto Err de Visual Basic, excepto el valor LastDLLError, que no se aplica aquí. El número de error indica qué error se ha producido. La descripción es útil en los casos en los que no desea controlar el error usted mismo. Simplemente puede pasarlo al usuario. Aunque normalmente querrá usar mensajes personalizados para la aplicación, no puede prever todos los errores; la descripción proporciona alguna pista sobre lo que salió mal. En el código de ejemplo, el objeto Connection notificó el error. Aquí verá el tipo o el identificador de programación del objeto, no un nombre variable.
Nota
El objeto Err de Visual Basic solo contiene información sobre el error más reciente. La colección de ADO Errors del objeto Connection contiene un objeto Error para cada error producido por la operación de ADO más reciente. Use la colección Errors en lugar del objeto Err para controlar varios errores. Para obtener más información sobre la colección Errors, vea Errores del proveedor. Sin embargo, si no hay ningún objeto Connection válido, el objeto Err es la única fuente de información sobre los errores de ADO.
¿Qué tipos de operaciones pueden provocar errores de ADO? Los errores comunes de ADO pueden implicar abrir un objeto como Connection o Recordset, intentar actualizar datos o llamar a un método o propiedad no admitidos por el proveedor.
Los errores de OLE DB también se pueden pasar a la aplicación como errores en tiempo de ejecución en la colección Errors.
En el siguiente tema se proporciona más información sobre los errores de ADO.