FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour capturar error db ADO
Posts: 149
Joined: Thu Jun 21, 2007 03:26 PM

capturar error db ADO

Posted: Thu Nov 17, 2011 07:19 PM

Hola, estoy comenzando con ADO. Tengo el siguiente problema: no puedo visualizar los errores que me devuelve la base de datos. Utilicé primero la funcion showerror que figura en los post, y luego la adoerror.

Les paso ambas:

FUNCTION AdoError(oCon, oError)
LOCAL oTmp

FOR EACH oTmp IN oCon:Errors // oAdoErrors

IF oError == nil
oError := ErrorNew()
oError:Description := "Error desconocido ADO"
ELSE
oError:SubCode := oTmp:NativeError //¡¡¡num. error nativo
oError:Description := oTmp:Description
ENDIF

NEXT

MSGSTOP ( (oError:Description + CRLF ) , ;
" Error " + oError:Operation + ' ' + oError:SubSystem )

RETURN (oError:SubCode) // Código num. del error

y

//-----------------------------------------//

FUNCTION ShowError( oError )

local cError := ""

cError += " Descripción : " + oError:Description
cError += " SubSystem : " + oError:SubSystem
cError += " Error Number : " + Str( oError:SubCode )
cError += " Severity : " + Str( oError:Severity )

RETURN NIL

y lo que hago es definir un rercordset oRS, completarlo con un select, y ejecutarlo. Funciona OK, cuando uso el SHOWERROR, no me muestra nada y sigue, y con el ADOERROR sale del programa.
¿alguna pista?
Gracias desde ya:

            cQry = "select * from autores"

            oRS:cursorLocation = 3 //adUseClient
            oRS:lockType       = 3 //adLockOptimistic
            oRS:cursorType     = 2 //adOpenDynamic
            oRS:source         = cQry
            oRS:activeConnection =  oServer

            TRY
                oRS:open()
            CATCH oError
               ? "Build RecordSet Failed!!! "+xtabla
               ShowError( oError )  
            END
Posts: 149
Joined: Thu Jun 21, 2007 03:26 PM

Re: capturar error db ADO

Posted: Thu Nov 17, 2011 08:56 PM

bueno... me autocontesto... aca va la funcion bien hecha... gracias a devguru...!!!

// ----------------------------------------------
FUNCTION AdoError(oCon, oError)
LOCAL oTmp, x, n, xstrerror

x:=ocon:errors:count()

FOR n=0 to x-1 // oAdoErrors

    xstrerror:="Descrip.: "+ocon:errors:item(n):Description+CRLF
    xstrerror:=xstrerror+"SQLState: "+ocon:errors:item(n):SQLState+CRLF
    xstrerror:=xstrerror+"NativeError: "+alltrim(str(ocon:errors:item(n):NativeError))+CRLF
    xstrerror:=xstrerror+"                           ----------              "

NEXT

MSGSTOP ( xstrerror, "Error")

RETURN nil

y la invocamos asi:

               TRY
                  oRS:open()
               CATCH oError
                    AdoError(oServer, oError)
               END

por supuesto, con el oRS definido como corresponde... Gracias...!!!

Continue the discussion