Page 1 of 1

TDolphin - bOnError

Posted: Fri Apr 20, 2012 3:20 pm
by MarioG
Daniel;
hago lo siguiente:

Code: Select all

   CONNECT oServer HOST     shIni["MARIADB"]["host"] ;
                   USER     shIni["MARIADB"]["user"] ;
                   PASSWORD shIni["MARIADB"]["pase"] ;
                   PORT     shIni["MARIADB"]["puerto"] ;
                   FLAGS    0;
                   DATABASE shIni["MARIADB"]["database"] ;
                   ON ERROR MiError( oServer, nError, lInternal )

   return( nil )

PROCEDURE MiError( oServer, nError, lInternal )
   LOCAL cText := ""

   cText += "Error from Custom Error Message" + CRLF
   cText += "================================" + CRLF
   cText += oServer:ErrorTxt() + CRLF
   cText += "ERROR No: " + Str( nError ) + CRLF
   cText += "Internal: " + If( lInternal, "Yes", "No" ) + CRLF

   ? cText + CRLF
 
que estoy haciendo mal?
porque en MiError() oServer es nil, en consecuencia me da error al ejecutar la sentencia oServer:ErrorTxt()
tambien pregunto: debo pasar lInternal, como .T. o .F. o solo mencionar la variable? y el manejdor me dice si el error es "MYSQL" o "TDOLPHIN" ?

gracias por tu tiempo

Re: TDolphin - bOnError

Posted: Fri Apr 20, 2012 4:04 pm
by Daniel Garcia-Gil
Hola
MarioG wrote:porque en MiError() oServer es nil, en consecuencia me da error al ejecutar la sentencia oServer:ErrorTxt()
en esta parte NO debes enviar oServer porque para el momento que se construye la conexion y se crea el codeblock bOnError oServer es NIL...
ON ERROR MiError( oServer, nError, lInternal )

si revisas tdolphin.ch veras que se debe usar es Self para este caso

ON ERROR MiError( Self, nError, lInternal )

Self es el objeto TDolphinSrv...
MarioG wrote:tambien pregunto: debo pasar lInternal, como .T. o .F. o solo mencionar la variable? y el manejdor me dice si el error es "MYSQL" o "TDOLPHIN" ?
extendiendo un poco mas sobre el caso anterior, cuando usas el comando xbase CONNECT (de tdolphin.ch) este envia 4 parametros al codeblock bOnError self, nError, lInternal, cExtra
Self = el objeto TDolphinSrv
nError = error devuelto por la clase, que podria ser un error de MySql o de programacion (error del programador)
lInternal = si el error es interno (error del programador) devuelve .T. de loc ontrario es un error devuelto por MySql
cExtra = es el ultimo query generado cuando se usa el metodo MultiQuery

estas son variables que el programador NO asigna son enviadas por la misma clase TDolphinSrv al codeblock bOnError

Re: TDolphin - bOnError

Posted: Fri Apr 20, 2012 8:33 pm
by MarioG
gracias... seguimos aprendiendo :wink:

Re: TDolphin - bOnError

Posted: Fri Apr 05, 2019 1:18 pm
by jbrita
Quien a probado ON ERROR de la Tdolphin y como ver el tipo de error

Saludos

Re: TDolphin - bOnError

Posted: Sat Apr 06, 2019 2:02 am
by joseluisysturiz
jbrita wrote:Quien a probado ON ERROR de la Tdolphin y como ver el tipo de error

Saludos
Saludos, espero te sirva, los parametros entre comillas con inventos mios...gracias... :shock:

Code: Select all

ShowError( oError, "ma_bancos-tbl_bancos", "ma_bancos.prg" )

FUNCTION ShowError( oError, cFuncion, cPrg, cTabla, cSql )

   DEFAULT cFuncion := "No definida"
   DEFAULT cPrg     := "PRG"
   DEFAULT cTabla   := "Nombre_Tabla"
   DEFAULT cSql     := "Sin Sql"

   MsgInfo( " Descripción: " + oError:Description + CRLF + CRLF +;
            "       Tabla: " + cTabla + CRLF +; // 28/02/2016
            "  En Funcion: " + cFuncion + CRLF +;
            "    Programa: " + cPrg + CRLF +;
            "    Sub Code: " + AllTrim( STR( oError:SubCode ) ) + CRLF +;
            "    Severity: " + AllTrim( STR( oError:Severity ) ) + CRLF +;
            "   SubSystem: " + oError:SubSystem + CRLF +;
            "   Operation: " + oError:SubSystem + CRLF + CRLF +;
            "   Sql-Query: " + cSql , oDatos:cTitMsg )

RETURN NIL


 

Re: TDolphin - bOnError

Posted: Sat Apr 06, 2019 8:45 am
by Biel EA6DD

Code: Select all

...
oServer:bOnError:={|oServer,nError,lInternal,cExtra| CtrlError( oServer, nError, lInternal, cExtra )}
...
STATIC FUNCTION CtrlError( oServer, nError, lInternal, cExtra )
   LOCAL cText := ""
   LOCAL oError
   hb_Default( @cExtra, "")
   SWITCH nError
   CASE 1062
      MsgAlert( 'Clave Primaria duplicada, registros no se ha grabado '+CRLF+;
               'Error '+hb_ntos(nError)+CRLF+;
               If( lInternal, "Internal Error:" + DOL_GETERROTEXT( nError ) , oServer:ErrorTxt() ) + " "+ CRLF + cExtra,ProcName(5) )
      EXIT
   CASE 1205
      MsgAlert('Tiempo de espera para bloqueo superado, datos no se han grabado.'+CRLF+;
               ' Reintentelo dentro de un rato.'+CRLF+;
               'Error '+Trim(Str(nError))+CRLF+;
               If( lInternal, "Internal Error:" + DOL_GETERROTEXT( nError ) , oServer:ErrorTxt() ) + " "+ CRLF + cExtra,ProcName(5) )
      EXIT
   CASE 1451
      MsgAlert('No puede eleminarse el registro'+CRLF+;
               'Otras tablas hacen referencia a este registro'+CRLF+;
               'Error '+Trim(Str(nError))+CRLF+;
               If( lInternal, "Internal Error:" + DOL_GETERROTEXT( nError ) , oServer:ErrorTxt() ) + " "+ CRLF + cExtra,ProcName(5) )
      EXIT
   CASE ... /*Más errores que queramos controlar*/
...
   OTHERWISE
      oError := ErrorNew()
      oError:SubSystem   = If( lInternal, "TDOLPHIN", "MYSQL" )
      oError:SubCode     = nError
      oError:Severity    = 2
      oError:Description = If( lInternal, "Internal Error:" + DOL_GETERROTEXT( nError ) , oServer:ErrorTxt() ) + " " + cExtra

      Eval( ErrorBlock(), oError )
   END

 

Re: TDolphin - bOnError

Posted: Mon Apr 08, 2019 3:11 pm
by jbrita
Gracias por su ayuda, pero el problema que tengo que hay ocaciones se me bloquea una tabla "PARAMETROS" que tiene 2 registros y la unica manera de desbloquearla es comunicarse con soprte del hosting y ellos la pueden desbloquearla, ese es mi problema por ando ddetras de algo para saber porque ocurre eso

saludos