Aplica
el TRY... CATCH
Había
oído hablar del TRY/CATCH muchas veces, pero hasta hace poco no me decidí a
usarlo y tengo que reconocer que “ya no puedo vivir sin él”. Me ha subyugado su
facilidad de uso y la versatilidad que te da.
Para
los más excepticos a las novedades, les voy a poner unas pocas líneas
(siguiendo aquello que más vale un sencillo código que mil palabras) para
animarles a seguir leyendo este artículo:
Por
ejemplo, supongamos que no estoy muy seguro de que la máquina sobre la que va a
correr mi aplicación tenga una .OCX para manejar por ejemplo gráficos. ¿Qué
haré para solucionar esto?
Pues
muy sencillo, el siguiente código me puede valer.
TRY
ox
= CreateObject(“mygraf.mygrpah”)
CATCH
Messagebox(‘No
tienes el control instalado’)
ENDTRY
Este código
lo puedo poner, por ejemplo, en el LOAD del formulario, de esa forma si la
máquina no tiene instalado el control, evito que el usuario pueda lanzar el
formulario y devuelvo un mensaje que me dé la pista para solucionar el
problema.
Vamos a
complicarlo un poquito más... pero no mucho más.
Mirate el
siguiente código:
LOCAL oErr as Exception
TRY
ox =
CreateObject(“mygraf.mygrpah”)
CATCH TO oErr
Messagebox(‘No tienes el control instalado’)
ENDTRY
Como sabes, las variables locales cuando se crean sin
especificaciones se crean como lógicas y te la cargan con.F. Si una variable la
quieres definir como local y permitirle que guarde un objeto de tipo excepción
(los generados por un error) deberás definirla como:
LOCAL oErr as Exception

Si
abro el depurador veo todas las propiedades de ese objeto que me pemitirían dar
una mayor información. Así puedo mejorar mi código con lo siguiente:
#DEFINE CRLF CHR(13)+CHR(10)
LOCAL oErr as Exception
LOCAL cStr as Character
TRY
ox = CreateObject("mygraf.mygrpah")
CATCH TO oErr
cStr = "No tienes el control
instalado" + CRLF + CRLF + ;
"[ Error: ] " + STR(oErr.ErrorNo) + CRLF +
;
"[
Linea: ] " + STR(oErr.LineNo) + CRLF + ;
"[
Menaje: ] " + oErr.Message + CRLF + ;
"[
Procedimiento: ] " + oErr.Procedure + CRLF + ;
"[
Detalles: ] " + oErr.Details + CRLF + ;
"[
StackLevel: ] " + STR(oErr.StackLevel) + CRLF + ;
"[
Instrucción: ] " + oErr.LineContents
MESSAGEBOX(cStr)
ENDTRY
RETURN
Que al producirse el error nos mostraría:

Quizás deberiamos dejar aquí el artículo y no complicarlo
más pero... añadiremos la forma de hacer como si fueras DO CASE/ENDCASE para
poner textos diferentes para diversos tipos de errores:
#DEFINE CRLF CHR(13)+CHR(10)
LOCAL oErr as Exception
LOCAL cStr as Character
TRY
ox = CreateObject("mygraf.mygrpah")
CATCH TO oErr WHEN oErr.ErrorNo = 1733
cStr = "No tienes el control
instalado" + CRLF + CRLF + ;
"[ Error: ] " + STR(oErr.ErrorNo) + CRLF +
;
"[
Linea: ] " + STR(oErr.LineNo) + CRLF + ;
"[
Menaje: ] " + oErr.Message + CRLF + ;
"[
Procedimiento: ] " + oErr.Procedure + CRLF + ;
"[
Detalles: ] " + oErr.Details + CRLF + ;
"[
StackLevel: ] " + STR(oErr.StackLevel) + CRLF + ;
"[
Instrucción: ] " + oErr.LineContents
MESSAGEBOX(cStr)
CATCH TO oErr WHEN oErr.ErrorNo = 1200
cStr = "No tienes espacio" + CRLF +
CRLF + ;
"[ Error: ] " + STR(oErr.ErrorNo) + CRLF +
;
"[
Linea: ] " + STR(oErr.LineNo) + CRLF + ;
"[
Menaje: ] " + oErr.Message + CRLF + ;
"[
Procedimiento: ] " + oErr.Procedure + CRLF + ;
"[
Detalles: ] " + oErr.Details + CRLF + ;
"[
StackLevel: ] " + STR(oErr.StackLevel) + CRLF + ;
"[
Instrucción: ] " + oErr.LineContents
MESSAGEBOX(cStr)
CATCH TO oErr
cStr = "Error. Algo pasa. Llama a Bill
Gates" + CRLF + CRLF + ;
"[ Error: ] " + STR(oErr.ErrorNo) + CRLF +
;
"[
Linea: ] " + STR(oErr.LineNo) + CRLF + ;
"[
Menaje: ] " + oErr.Message + CRLF + ;
"[
Procedimiento: ] " + oErr.Procedure + CRLF + ;
"[
Detalles: ] " + oErr.Details + CRLF + ;
"[
StackLevel: ] " + STR(oErr.StackLevel) + CRLF + ;
"[
Instrucción: ] " + oErr.LineContents
MESSAGEBOX(cStr)
ENDTRY
RETURN
FoxPress – Junio de 2004
© 2004 FoxPress. All rights reserved