Vous êtes sur la page 1sur 4

Hay veces cuando el cdigo se convierte en susceptible a problemas de errores de usuario, incluso

aunque demostrado el propio cdigo. Cuanto mayor sea el programa, el ms a menudo surgen
situaciones que no se han previsto en el momento de escribir el cdigo. Por este motivo, siempre que
incluir rutinas de tratamiento de errores en el cdigo para evitar la aplicacin se bloquea cuando se
producen errores inesperados. Rutinas de interceptacin de errores ofrecen ayuda importante en el
proceso de depuracin.
Volver al principio

Instruccin On Error
Access Basic incluye la instruccin On Error para la interceptacin de errores, as como varios otros
comandos para informes y errores de procesamiento. La instruccin On Error es seguida de una
clusula de GoTo, que hace que bifurcar a una etiqueta predefinida cuando se produce un error,
control del programa o una clusula Resume Next, que indica a Access Basic para omitir la condicin
de error y continuar con la siguiente instruccin.

Para crear una etiqueta para una instruccin On Error GoTo, escriba el nombre de la etiqueta, seguida
por dos puntos (:). Cuando control se pasa a la etiqueta por la instruccin On Error GoTo, se ejecutan
los comandos que siguen la etiqueta.

Generalmente, debe colocar la etiqueta y su rutina de tratamiento de errores correspondiente en la


parte inferior del procedimiento, precedido por una instruccin End Sub o End Function, para
asegurarse de que la rutina se ejecuta slo cuando bifurcado y no por error.

Nota: Etiqueta no indica necesariamente un salto de flujo del programa.

Se muestra a continuacin, se es un procedimiento Sub que realiza una accin de SQL basndose en
un valor de cadena SQL. La instruccin On Error Resume Next se utiliza para controlar los errores
generados por el primer mtodo de DeleteQueryDef (por ejemplo, si no existe "TempQuery"). En el
Error GoTo SQLError significa que si se producen otros errores, programa el control pasa a la rutina de
tratamiento de errores de SQLError. La instruccin On Error GoTo 0 se utiliza al final del procedimiento
para deshabilitar la interceptacin de errores.

Sub PerformSQLAction (InDB As String, SQLStmt As String)


Dim SQLDb As Database, SQLQuery As QueryDef
On Error Resume Next
Set SQLDb = OpenDatabase(InDB)

SQLDb.DeleteQueryDef ("TempQuery")
On Error GoTo SQLError:
Set SQLQuery = SQLDb.CreateQueryDef("TempQuery", SQLStmt)
SQLQuery.Execute
SQLQuery.Close
SQLDb.DeleteQueryDef ("TempQuery")
On Error GoTo 0
Exit Sub
SQLError:
MsgBox "An error occurred while executing the SQL statement."
Exit Sub
End Sub

La instruccin Exit Sub es necesaria al final de la rutina de tratamiento de errores, incluso aunque la
instruccin End Sub sigue. En lugar de la instruccin Exit Sub, puede utilizar una instruccin Resume
Next para devolver el control a la lnea siguiente a la lnea de cdigo que provoc el error.
Volver al principio

Err() Erl(), funciones y Error$()


Access Basic incluye las funciones Err() Erl() y Error$(), todas las cuales devuelven informacin sobre
el error. La funcin Error$() devuelve el mensaje de error como una cadena, la funcin Err() devuelve
un nmero que representa el mensaje de error y la funcin Erl() devuelve el nmero de la lnea en la
que se produjo el error. Estas funciones se puede codificar su rutina de interceptacin de errores para
mostrar mensajes de error significativos y captura de errores especficos.

A continuacin se muestra una rutina de interceptacin de errores genrica que utiliza funciones
Error$() y Erl(). Este tipo de rutina indica qu error se produjo y donde; tambin permite omitir el
error y continuar o cancelar la ejecucin y investigar el problema.

On Error GoTo ErrorHandler


ErrorHandler:

If MsgBox("The following error has occurred at line " &_


Trim(Str(Erl)) & ":" & Chr(13) & Chr(10) & Chr(13) &_
Chr(10) & Error$, 17) = 1 Then Resume Next Else Stop

El siguiente procedimiento Sub ilustra cmo la funcin Error$() crear mensajes de error informativo
para ayudar a y los usuarios que depurar el programa:

Sub MyError ()
On Error GoTo ErrorHandler
INTEGERVAL% = 99999 'Generates Numeric Overflow error
Debug.Print "Error was ignored"
Exit Sub
ErrorHandler:
If MsgBox("The following error has occurred at line " &_
Trim(Str(Erl)) & ":" & Chr(13) & Chr(10) & Chr(13) &_
Chr(10) & Error$, 17) = 1 Then Resume Next Else Stop
Exit Sub
End Sub

Puede utilizar la funcin Err() para generar una instruccin SQL SELECT que intercepta errores
especficos y toma una accin diferente depending on el nmero de error. Puede utilizar la funcin
Erl() para identificar exactamente qu lnea est ocasionando el problema en el programa para prever
condiciones de error en el programa y para controlar los errores ms fcilmente.

Si utiliza la funcin Erl(), no es necesario el nmero de cada lnea de su cdigo para buscar el nmero
de lnea incorrecta. Nmero en su lugar, slo las lneas de cdigo probablemente a causar problemas.
(Los nmeros de lnea representan etiquetas, en lugar de nmeros de lnea clsico, como en otros
lenguajes bsicas). A continuacin, si se produce un error en una de las lneas numeradas, la funcin
Erl() informa slo ese nmero de lnea.

Tambin puede utilizar este mtodo si tiene dos lneas de cdigo que puede generar el mismo error y
desea controlar cada caso por separado, como en el ejemplo siguiente:

Function ErlTest()
On Error Goto ErlTest_Err
10: Open "AUTOEXECBAT" For Input As #1 'causes an error.
20: Open "CONFIG.SYS" For Input As #2
Close
Exit Sub
ErlTest_Err:
If Erl = 10 Then
MsgBox "Could not open AUTOEXEC.BAT file."
ElseIf Erl = 20 Then
MsgBox "Could not open CONFIG.SYS file."
End If
Exit Sub
End Sub

Como no hay ninguna posibilidad de que existe un archivo denominado "AUTOEXECBAT", esta lnea de
errores de cdigo fuera y control del programa pasa a la rutina de tratamiento de errores
"ErlTest_Err". La funcin Erl() detecta el nmero de la lnea en el que se ha producido el error y
muestra el mensaje de error "No se pudo abrir el archivo Autoexec.bat".
Volver al principio
Referencias

Microsoft Access "Referencia del lenguaje", versin 1.0, pginas 331 333

Para obtener ms informacin acerca de rutinas de tratamiento de errores, busque "Control de error"
mediante el men Ayuda de Microsoft Access.

Vous aimerez peut-être aussi