Control de errores para aplicaciones robustas – 1

Anuncio
Control de errores para aplicaciones robustas – 1
Los mensajes de error en Access
El control de errores en tiempo de ejecución es uno de los temas más importantes
para la creación de aplicaciones robustas.
Access tiene varias instrucciones para interpretar todos estos errores que pueden
aparecer cuando se está depurando la aplicación, debido a datos erróneos o a errores del
usuario. En este curso trataremos los siguientes temas:
1. Lo básico del control de errores en tiempo de ejecución de Access
2. Formas de utilizar el control de errores
3. Los objetos Err y Error
4. Cómo seguir la pista a los errores utilizando un archivo de registro de errores
personalizado.
5. Cómo crear un procedimiento de control de errores centralizado
6. Cuestiones sobre el control de errores
1. Mensajes de error en Access
Cuando sucede un error, Access muestra por defecto una descripción del error. Como
se muestra en la imagen inferior, en este cuadro de diálogo, si se elige Depurar, aparece la
ventana de módulos, si se elige Continuar se ignora el error y si se elige Terminar se detiene
la ejecución.
Utilizar el controlador de errores es muy sencillo, una vez te hayas habituado. Es muy
importante para el programador aprovecharse de su potencia.
Hay muchas formas de utilizar el controlador de errores. Por ejemplo, utilizando el
controlador de errores podemos captar errores que no se pueden depurar en tiempo de
desarrollo. Estas son unas pocas situaciones que pueden ocurrir en tiempo de ejecución y
pueden ser controladas utilizando instrucciones del controlador de errores de Access.

El usuario ha olvidado colocar un disco necesario en la disquetera, causando un
error. Se puede controlar el error y pedirle al usuario que coloque el disco.

El usuario está borrando algunas tablas de la Base de datos mediante código, pero
una de las tablas ya está borrada. Esto causa normalmente un error y se puede
hacer que el controlador de errores continúe en la siguiente línea de código,
obviando la tabla previamente borrada.

Cuando alguien mueve en el servidor el Back end – la parte de la aplicación que
contiene las tablas- a otra localización de red, se puede verificar esto al iniciar la
aplicación, como se explica en el curso Creación de aplicaciones multiusuario.
2. Formas de utilizar el control de errores
Cuando se trabaja en el control de errores de Access, éstas son las instrucciones que
se pueden utilizar: On Error, Resume y Exit
La instrucción On Error permite especificar dónde se quiere exactamente que Access
actúe cuando suceda un error. La instrucción On Error tiene variables utilizadas para
direccionar.
Para controlar el control de errores se debe utilizar la instrucción On Error Goto:
On Error Goto NumeroLinea|EtiquetaLinea
La instrucción On Error Goto tiene dos opciones : Numero Línea, que puede ser un
número situado en el procedimiento, o Etiqueta Línea que es una etiqueta que especifica el
inicio de una sección de un procedimiento.
El código siguiente crea un controlador de errores muy simple.
Sub SimpleError(intNumerator As Integer, intDenominator As Integer)
On Error GoTo SimpleError_Error
Debug.Print intNumerator / intDenominator
SimpleError_Error:
MsgBox Err.Description, vbCritical, "Ha ocurrido un error"
Exit Sub
End Sub
Este procedimiento muestra un mensaje de error “Ha ocurrido un error” y sale del
mismo. Es mejor que el presentado en la figura anterior.
Después de recibir el usuario este mensaje, la ejecución del programa sale
directamente debido al error producido.
La instrucción On Error Resume Next se utiliza cuando el programa necesita
continuar en la línea que sigue inmediatamente a la que originó el error. Un ejemplo sucede
cuando se intenta eliminar una tabla que ya ha sido eliminada. El código para éste ejemplo es
el siguiente:
Sub InlineResumeNextExample()
'—Esta instrucción dice a Access que ignore los errores y
'—salte a la siguiente línea.
On Error Resume Next
DoCmd.DeleteObject acTable, "UnaTabla"
End Sub
La instrucción On Error Goto 0 se utiliza cuando queremos que Access vuelva a su
controlador de errores predeterminado, o queremos referirnos a un controlador de errores
que fue activado en un procedimiento por encima del procedimiento activo. Esto se llama
anidar un error.
Dependiendo del tipo de procedimiento que se esté ejecutando se puede utilizar Exit
Sub | Function para salir directamente del controlador de errores. El siguiente código utiliza
la instrucción Exit Sub para salir del procedimiento después de mostrar el error.
Sub SimpleError(intNumerator As Integer, intDenominator As Integer)
On Error GoTo SimpleError_Error
Debug.Print intNumerator / intDenominator
SimpleError_Error:
MsgBox Err.Description, vbCritical, "Ha ocurrido un error"
Exit Sub
End Sub
Las instrucciones Resume, Resume Next y Resume Etiqueta | línea se utilizan
dentro del controlador de errores para continuar con el procedimiento después de tratar el
error.
La instrucción Resume devuelve la ejecución del procedimiento a la línea en la que
ocurrió el error. Esta instrucción se utiliza cuando el error puede ser solventado y se vuelve a
reintentar. Por ejemplo, cuando el usuario intenta copiar un archivo en la disquetera sin que
haya introducido un disquette en la unidad. Utilizando la instrucción Resume, se puede pedir
al usuario que inserte un disquette y lo intente de nuevo.
Sub ResumeExample(intNumerator As Integer, intDenominator As Integer)
On Error GoTo Error_ResumeExample
DoCmd.CopyDatabaseFile "C:\Mis BD\MiBD.mdb", True
Exit Sub
Error_ResumeExample:
Msgbox “ Compruebe que hay disco en la disquetera e intente de nuevo.“
Resume
Else
Exit Sub
End If
End Sub
La instrucción Resume Next proporciona la capacidad de dar un mensaje, tratar el
error y desplazarse a la siguiente línea de código posterior a la que originó el error.
Sub ResumeNextExample()
On Error GoTo Error_ResumeNextExample
DoCmd.DeleteObject acTable, "CualquierTabla"
Exit Sub
Error_ResumeNextExample:
MsgBox Err.Description, vbCritical, "Error al intentar eliminar la tabla"
Resume Next
End Sub
En éste caso Resume Next no hace mucho, pero al menos avisa al usuario de que no se
ha realizado lo que pretendía.
La instrucción Resume Etiqueta | línea permite continuar en la etiqueta de línea
especificada. Esta instrucción se utiliza habitualmente para crear una salida del
procedimiento.
Sub ResumeLineLabelExample()
On Error GoTo Error_ResumeLineLabelExample
DoCmd.DeleteObject acTable, "NoTable"
'—Esta etiqueta inicia la salida del procedimiento
Exit_ResumeLineLabelExample:
Exit Sub
'—Esta etiqueta es para tartar el error
Error_ResumeLineLabelExample:
MsgBox Err.Description, vbCritical, "Error al eliminar la tabla"
Resume Exit_ResumeLineLabelExample
End Sub
Descargar