FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour :procLine - equivalente
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
:procLine - equivalente
Posted: Tue Dec 20, 2016 01:01 PM

Buenos dias Gente
Compilando con xHarbour, capturo un error y describo, entre otros, el suceso informando con oError:procLine
Al compilar con Harbour tal data no existe; cual es el equivalente?; ya que si uso ProcLine(), este sin pasarle parámetro numérico, me devuelve la linea de donde se llamo al Alert() del error y no precisamente donde ocurrió el error.

gracias

Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Tue Dec 20, 2016 01:17 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: :procLine - equivalente
Posted: Tue Dec 20, 2016 02:26 PM
Karinha; muchas gracias
Esto necesito:

Alert( "[Error nro: "+Str(oErr:GenCode,4,,TRUE)+"] - "+oErr:Description+CRLF+" - Línea: "+Str(oErr:procLine,4,,TRUE);
"EL Proceso de borrado se canceló" +CRLF+ ;
"Verifique archivo:"+h0:cFileLog,,"Atención",,IDI_HAND )


No ProcLine(), porque, en este caso, me devuelve la linea del Alert()
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Tue Dec 20, 2016 02:49 PM
Como en este caso?

Code (fw): Select all Collapse
FUNCTION ADOSHOWERROR( oCn, cTable, lSilent ) //CHANGES BY BYTE-ONE
   LOCAL nErr, oErr, cErr
   DEFAULT oCn TO oConnection
   DEFAULT lSilent TO .F.
   DEFAULT cTable TO ""
   IF ( nErr := oCn:Errors:Count ) > 0
      oErr  := oCn:Errors( nErr - 1 )
      IF ! lSilent
         WITH OBJECT oErr
            cErr     := IF( !EMPTY( cTable ),'Table: ' + cTable +CRLF + CRLF ,"")
            cErr     += oErr:Description
            cErr     += CRLF + 'Source : ' + oErr:Source
            cErr     += CRLF + 'NativeError : ' + cValToChar( oErr:NativeError )
            cErr     += CRLF + 'Error Source : ' + oErr:Source
            cErr     += CRLF + 'Sql State : ' + oErr:SQLState
            cErr     += CRLF + REPLICATE( '-', 50 )
            cErr     += CRLF + PROCNAME( 1 ) + "( " + cValToChar( PROCLINE( 1 ) ) + " )"
            cErr     += CRLF + PROCNAME( 2 ) + "( " + cValToChar( PROCLINE( 2 ) ) + " )"
            cErr     += CRLF + PROCNAME( 3 ) + "( " + cValToChar( PROCLINE( 3 ) ) + " )"
            cErr     += CRLF + PROCNAME( 4 ) + "( " + cValToChar( PROCLINE( 4 ) ) + " )"
            cErr     += CRLF + PROCNAME( 5 ) + "( " + cValToChar( PROCLINE( 5 ) ) + " )"
            cErr     += CRLF + PROCNAME( 6 ) + "( " + cValToChar( PROCLINE( 6 ) ) + " )"
            cErr     += CRLF + PROCNAME( 7 ) + "( " + cValToChar( PROCLINE( 7 ) ) + " )"
            MSGALERT( cErr, IF( oCn:Provider = NIL, "ADO ERROR",oCn:Provider ) )
         END
      ENDIF
   ELSE
      MSGALERT( "ADO ERROR UNKNOWN"+;
                CRLF + PROCNAME( 1 )  + "( " + cValToChar( PROCLINE( 1 ) ) + " )" + ;
                CRLF + PROCNAME( 2 )  + "( " + cValToChar( PROCLINE( 2 ) ) + " )" + ;
                CRLF + PROCNAME( 3 )  + "( " + cValToChar( PROCLINE( 3 ) ) + " )" + ;
                CRLF + PROCNAME( 4 )  + "( " + cValToChar( PROCLINE( 4 ) ) + " )" + ;
                CRLF + PROCNAME( 5 )  + "( " + cValToChar( PROCLINE( 5 ) ) + " )" + ;
                CRLF + PROCNAME( 6 )  + "( " + cValToChar( PROCLINE( 6 ) ) + " )" + ;
                CRLF + PROCNAME( 7 )  + "( " + cValToChar( PROCLINE( 7 ) )  )
   ENDIF
   RETURN oErr
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Tue Dec 20, 2016 02:52 PM
Ó

Code (fw): Select all Collapse
//----------------------------------------------------------------------------//
FUNCTION CheckErr ()

  LOCAL nLoc, oError

  TRY
    nLoc := "error"/2
  CATCH oError
    msgInfo( oError:gencode )
    msgInfo( oError:SubSystem )
    msgInfo( oError:SubCode )
    msgInfo( oError:Operation )
    msgInfo( oError:Description )
    msgInfo( valToPrg( oError:Args ) )
    quit
  END

RETURN (nLoc)
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: :procLine - equivalente
Posted: Thu Dec 22, 2016 01:16 PM
karinha
Por favor, compila este sample con xHarbour y verifica: oError:Procline
Luego compila con xharbour y verifica ProcLine()
Los valores de linea son distintos (o estoy haciendo algo mal?)
gracias

Code (fw): Select all Collapse
#include "FiveWin.ch"

Procedure Main()
local oError, ;
      x, ;
      nTotal

   TRY
      nTotal:= x * 100

   CATCH oError
#ifdef __XHARBOUR__
      Alert( "Error nro: " + cValToChar( oError:GenCode) + CRLF + ;
             "SubC: " + cValToChar( oError:SubCode ) + CRLF + "OSCode: " + cValToChar( oError:OsCode ) + CRLF + ;
             "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Mensaje: " + oError:Description + CRLF + ;
             "Linea: " +cValToChar( oError:procLine ),,"Atención" )

#else // __HARBOUR__
      Alert( "Error nro: " + cValToChar( oError:GenCode) + CRLF + ;
             "SubC: " + cValToChar( oError:SubCode ) + CRLF + "OSCode: " + cValToChar( oError:OsCode ) + CRLF + ;
             "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Mensaje: " + oError:Description + CRLF + ;
             "Linea: " +cValToChar( ProcLine() ),,"Atención" )
#endif
   END

// Fin
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 01:34 PM
Holá, acá funciona bién com harbour y xharbour con FWHX16.10

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "error.ch"

Procedure Main()

   local oError, x, nTotal

   TRY

      nTotal := x * 100

   CATCH oError

   #ifdef __XHARBOUR__

      Alert( "Error nro: " + cValToChar( oError:GenCode) + CRLF + ;
             "SubC: " + cValToChar( oError:SubCode ) + CRLF + "OSCode: " + cValToChar( oError:OsCode ) + CRLF + ;
             "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Mensaje: " + oError:Description + CRLF + ;
             "Linea: " +cValToChar( oError:procLine ),,"Atención" )

   #else // __HARBOUR__

      Alert( "Error nro: " + cValToChar( oError:GenCode) + CRLF + ;
             "SubC: " + cValToChar( oError:SubCode ) + CRLF + "OSCode: " + cValToChar( oError:OsCode ) + CRLF + ;
             "SubSystem: " + cValToChar( oError:SubSystem ) + CRLF + "Mensaje: " + oError:Description + CRLF + ;
             "Linea: " +cValToChar( ProcLine() ),,"Atención" )

   #endif

   END

Return Nil

// Fin


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 01:58 PM

Karinha BOM 2017!!
muchas gracias por la ayuda!
Disculpa que insista:
Compilando con xharbour, oError:procLine devuelve el mismo numero de linea que compilando con harbour, ProcLine()?
(compilando com xHarbour, oError:procLine retorna o mesmo número da linha que a compilando com Harbour, ProcLine()?)

Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 02:12 PM
Gracias, un ótimo 2017 para ti también!

Con xHarbour:



Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 02:14 PM
Con Harbour:

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 03:14 PM
Karinha;
oError:procLine devuelve linea 10 (que es correcto). Mientras que ProcLine() devuelve linea 26, que NO es correcto

Que solución hay, si lo sabes, para Harbour?
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 04:12 PM
Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "error.ch"

FUNCTION Main()

   local oError, x, nTotal, nLoc

  TRY

    nLoc := "error" / 2

  CATCH oError  // Harbour and xHarbour retorna linea 26

   msgInfo( oError:gencode )

   msgInfo( oError:SubSystem )

   msgInfo( oError:SubCode )

   msgInfo( oError:Operation )

   msgInfo( oError:Description )

   msgInfo( valToPrg( oError:Args ) )

   MsgInfo( cValToChar( procLine() ),, "Atención" )

  END

RETURN NIL

// Fin


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: :procLine - equivalente
Posted: Mon Jan 02, 2017 09:06 PM
Karinha;
Tu ejemplo
Indica error en Linea 26 y NO en Linea 10 (Se entiende?!)
O sea ProcLine() NO esta devolviendo correctamente la línea de error; sino la línea donde se llama a ProcLine()

Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: :procLine - equivalente
Posted: Tue Jan 03, 2017 11:08 AM

se me ocurrió que podriamos "extender" la clase Error de Harbour para implementar el mensaje ProcLine()

include "c:\harbour\contrib\xhb\xhbcls.ch"

...

EXTEND CLASS Error WITH MESSAGE ProcLine INLINE ProcLine()

pero la clase Error de Harbour no lo permite. De hecho no permite crear una clase derivada de ella

no se aún cual es la razón de esta limitación

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: :procLine - equivalente
Posted: Tue Jan 03, 2017 11:59 AM

El errorsys de FWH utiliza ProcLine() y funciona correctamente con Harbour y xHarbour

Puedes probar el ejemplo samples\testerro.prg usando buildh.bat y buildx.bat y verás
que ambos reportan el mismo número de línea

regards, saludos

Antonio Linares
www.fivetechsoft.com