INFORMACIÓN: Extraer información de errores de ADO en VB


Resumen


Cuando los objetos de datos ActiveX (ADO), se produce un error, a menudo se rellena la colección Errors con detalles sobre la causa del error. En este artículo se proporciona código de ejemplo para extraer la máxima información posible sobre cualquier error provocado por ADO mediante ADO Basic.If Visual propio encuentra un error, no llena la colección Errors, pero en su lugar tiene que utilizar un mecanismo de error nativo a detectar y mostrar el error, en este caso, el objeto Err de Visual Basic. Si el proveedor o los componentes subyacentes generan error, éstos se rellenará en la colección Errors de ADO. Por tanto, debe comprobar el objeto Error de Visual Basic y la colección Errors de ADO. Sin embargo, es aconsejable conservar los valores de la colección Err, porque si Error control es demasiado complejo, en el proceso de examinar y mostrar la colección Errors, podría acabar restablecer el objeto Err.

Más información


La documentación para el objeto ADO Error indica que la colección Errors se rellenará si se produce algún error en ADO o es proveedor subyacente. Esto es algo incorrecto. Dependiendo del origen del error o errores incluso, en el proveedor subyacente a ADO (OLE DB) o dentro de ADO, no se puede llenar la colección errors. Es necesario comprobar el objeto Error de Visual Basic así como la colección Errors de ADO. La colección Errors sólo está disponible desde el objeto de conexión, por lo que necesitará inicializar ADO fuera de un objeto de conexión. Siguiente es el código de ejemplo que muestra cómo abrir una conexión e informar de los errores encontrados. A menudo la colección Errors devuelve un HRESULT en formato hexadecimal (por ejemplo, 0 x 80004005) o como un valor de tipo long (por ejemplo, 2147467259). Estos HRESULT pueden ser generados por los componentes subyacentes, como OLE-DB o incluso el propio OLE. Cuando este sea el caso, puede resultar confuso ya que estos códigos no se documentan en la documentación de ADO. Sin embargo, con frecuencia se encontró HRESULTS puede encontrarse en el artículo de Microsoft Knowledge Base enumerado en la sección de referencias.
Private Sub cmdTemplate_Click()   Dim Conn1 As Connection   Dim Errs1 As Errors   Dim i As Integer   Dim StrTmp   On Error GoTo AdoError   Set Conn1 = CreateObject("ADODB.Connection")   ' Open connection to Bogus ODBC Data Source for BIBLIO.MDB   Conn1.ConnectionString = "DBQ=BIBLIO.MDB;" & _              "DRIVER={Microsoft Access Driver (*.mdb)};" & _              "DefaultDir=C:\Bogus\Directory\Path;" & _              "UID=admin;PWD=;"   Conn1.Open   ' Remaining code goes here.   Done:   ' Close all open objects.     If Conn1.State = adStateOpen Then        Conn1.Close      End If   ' Destroy anything not destroyed yet.     Set Conn1 = Nothing   ' We're done.     Exit Sub   AdoError:      Dim errLoop As Error      Dim strError As String      i = 1   ' Process     StrTmp = StrTmp & vbCrLf & "VB Error # " & Str(Err.Number)     StrTmp = StrTmp & vbCrLf & "   Generated by " & Err.Source     StrTmp = StrTmp & vbCrLf & "   Description  " & Err.Description   ' Enumerate Errors collection and display properties of   ' each Error object.     Set Errs1 = Conn1.Errors     For Each errLoop In Errs1          With errLoop            StrTmp = StrTmp & vbCrLf & "Error #" & i & ":"            StrTmp = StrTmp & vbCrLf & "   ADO Error   #" & .Number            StrTmp = StrTmp & vbCrLf & "   Description  " & .Description            StrTmp = StrTmp & vbCrLf & "   Source       " & .Source            i = i + 1       End With    Next      MsgBox StrTmp      ' Clean up Gracefully      On Error Resume Next      GoTo Done   End Sub

Referencias


Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
168335 INFO: utilizando ActiveX Data Objects (ADO mediante Visual Basic)
168354 INFO: errores de proveedor OLEDB y OLE subyacente se exponen a través de ADO