ERRORBLOCK() 
 Establece un bloque de código para que se ejecute cuando surja un error de
 tiempo de ejecución
------------------------------------------------------------------------------
 Sintaxis

     ERRORBLOCK([<bManejadorError>]) --> bManejadorErrorActual

 Argumentos

     <bManejadorError> es el bloque de código que se ejecutará siempre
     que se produzca un error de tiempo de ejecución. Cuando se evalúa, el
     sistema pasa un objeto de error a <bManejadorError> como argumento.

 Devuelve

     ERRORBLOCK() devuelve el actual bloque de código de manejo de errores.
     Si no se ha fijado ningún bloque de manejo de errores desde que se
     llamó al programa, ERRORBLOCK() devuelve el bloque de manejo de errores
     por defecto.

 Descripción

     ERRORBLOCK() es una función de error que define la ejecución de un
     manejador de errores siempre que se produzca un error. Especifique el
     manejador de errores como un bloque de código con la forma siguiente:

     { |<objError>| <lista de expresiones>,... }

     donde <oError> es un objeto error que contiene información sobre el
     error. Dentro del bloque de código, pueden enviarse mensajes al objeto
     con el fin de obtener información sobre el error. Si el bloque de
     manejo de errores devuelve verdadero (.T.) se reintenta la operación
     fallida y si devuelve falso (.F.) se reanuda el proceso.

     El bloque de código de manejo de errores puede especificarse como una
     lista de expresiones o como una llamada a una función definida por el
     usuario. La segunda opción es más útil puesto que pueden utilizarse las
     sentencias de control de CA-Clipper en lugar de expresiones. Este es
     especialmente el caso si existe un BEGIN SEQUENCE pendiente y desea
     efectuar BREAK a la sentencia RECOVER más próxima.

     Como esto implica, los bloques de manejo de errores pueden utilizarse
     en combinación con estructuras de control BEGIN SEQUENCE...END. En un
     bloque puede manejar errores de dispositivo, de bajo nivel, y comunes
     que cuentan con un mecanismo de recuperación general. Si la operación
     requiere un manejo específico de errores, defina BEGIN SEQUENCE y
     después ejecute un BREAK a la sentencia RECOVER, devolviendo el objeto
     de error para el procesamiento local. Consulte el ejemplo que se
     muestra más adelante.

     Si no se ha especificado <bManejadorError> utilizando ERRORBLOCK() y se
     ha producido un error de tiempo de ejecución, se evalúa el bloque de
     manejo de errores por defecto. Este manejador de errores muestra un
     mensaje descriptivo en la pantalla, establece ERRORLEVEL() en 1 y
     después sale mediante QUIT del programa.

     Puesto que ERRORBLOCK() devuelve el bloque de manejo de errores actual,
     es posible especificar un bloque de manejo de errores para una
     operación guardando el bloque actual y restableciéndolo después de que
     se haya completado la operación. Del mismo modo, los gestores de
     errores especificados como bloques de códigos, pueden pasarse a los
     procedimientos y funciones definidas por el usuario y devolverse
     mediante RETURN como valores.

     Para obtener más información sobre la estructura y operaciones de
     objetos de error, consulte la Clase Error y el
     capítulo "Estrategias de Manejo de Errores" en la Guía de Programación
     y Utilidades.

 Ejemplos

      El fragmento de código siguiente establece un bloque de manejo
        de errores, que se llamará cuando se produzca un error dentro de
        una construcción BEGIN SEQUENCE:

        LOCAL bManejadorError, bUltimoManejador, objErr
        bManejadorError := { |oError| ;
              MiManejadorError(oError) }
        //
        // Guardar el manejador actual
        bUltimoManejador := ERRORBLOCK(bManejadorError)
        //
        BEGIN SEQUENCE
           .
           . <sentencias de operación>
           .
        // Recibir el objeto de error desde BREAK
        RECOVER USING oErrorInfo
           .
           . <sentencias de recuperación>
           .
        END
        ERRORBLOCK(bUltimoManejador)            // Restaurar el manejador
        RETURN

        FUNCTION MiManejadorError( objError )
           //
           BREAK oError                         // Devolver el objeto de
                                                // error a RECOVER
           RETURN NIL

 Ficheros   La biblioteca asociada es CLIPPER.LIB.

 To download this example - click here.

See Also: BEGIN SEQUENCE