FoxPress – Junio 2003

 

      Aplica el TRY... CATCH

 

http://www.fpress.com/

 

                        

            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