On error vs Try/Catch

160 views
Skip to first unread message

Saúl Piña

unread,
Dec 12, 2013, 3:38:38 PM12/12/13
to publice...@googlegroups.com
Honestamente no he utilizado ninguno de las dos opciones para controlar errores, mi metodo de programacion es de la siguiente manera:

1. Proyecto nuevo de VFP (project.pjx)
2. Codigo orientado a objetos (thisform.text1.value, thisform.text1.enabled=.t., etc)
3. Menus y PRG´S

Cómo puedo iniciar a implementar las opciones.

Muchas gracias

Fernando D. Bozzo

unread,
Dec 12, 2013, 4:50:19 PM12/12/13
to publice...@googlegroups.com
Mirando código de ejemplo y armando tos propios ejemplos.

El único ejemplo que tengo a mano para darte es foxbin2prg, aunque puede que te resulte algo complejo.


Saludos.-

Saúl Piña

unread,
Dec 12, 2013, 4:59:33 PM12/12/13
to publice...@googlegroups.com
Saludos Fernando desde este lado del mundo, gracias por tus comentarios, mi intención es complementar lo que llevo aprendido y explorar nuevas (para mi) opciones de codigo y funciones que podrían ser utiles para mis programas. Poco a poco iré familiarizandome con este tipo de funciones.

Voy a revisar foxbin2prg

Como siempre muy agradecido.

HernanCano

unread,
Dec 12, 2013, 11:57:18 PM12/12/13
to publice...@googlegroups.com
1. En las ayudas de VFP9 está el sgte ejemplo del uso de ON ERROR:


ON ERROR DO errHandler WITH ;
   ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM( ), LINENO( )
USE nodatabase  
ON ERROR  && Restores system error handler.
PROCEDURE errHandler
   PARAMETER merror, mess, mess1, mprog, mlineno
   CLEAR
   ? 'Error number: ' + LTRIM(STR(merror))
   ? 'Error message: ' + mess
   ? 'Line of code with error: ' + mess1
   ? 'Line number of error: ' + LTRIM(STR(mlineno))
   ? 'Program with error: ' + mprog
ENDPROC

2. También en las ayudas de VFP9 encontré el sgte ejemplo del uso de TRY/CATCH:

LOCAL x AS Integer, y AS Integer, result AS Integer
LOCAL oErr AS Exception, oErr1 AS Exception 
TRY
   x = 1
   TRY 
      USE nothing
      GO TOP
      y = nothing.col1
   CATCH TO oErr 
      oErr.UserValue = "Nested CATCH message: Unable to handle"
      ?[: Nested Catch! (Unhandled: Throw oErr Object Up) ]  
      ?[  Inner Exception Object: ]
      ?[  Error: ] + STR(oErr.ErrorNo) 
      ?[  LineNo: ] + STR(oErr.LineNo) 
      ?[  Message: ] + oErr.Message 
      ?[  Procedure: ] + oErr.Procedure 
      ?[  Details: ] + oErr.Details 
      ?[  StackLevel: ] + STR(oErr.StackLevel) 
      ?[  LineContents: ] + oErr.LineContents
      ?[  UserValue: ] + oErr.UserValue 
      THROW oErr 
   FINALLY
      ?[: Nested FINALLY executed ] 
      IF USED("nothing")   
         USE IN nothing
      ENDIF      
   ENDTRY   
   result = x-y
CATCH TO oErr1
   ?[: Outer CATCH! ]
      ?[  Outer Exception Object: ] 
      ?[  Error: ] + STR(oErr1.ErrorNo)
      ?[  LineNo: ] + STR(oErr1.LineNo) 
      ?[  Message: ] + oErr1.Message 
      ?[  Procedure: ] + oErr1.Procedure 
      ?[  Details: ] + oErr1.Details 
      ?[  StackLevel: ] + STR(oErr1.StackLevel) 
      ?[  LineContents: ] + oErr1.LineContents 
      ?[  ->UserValue becomes inner exception THROWn from nested TRY/CATCH ]
      ?[     Error: ] + STR(oErr1.UserValue.ErrorNo)
      ?[     Message: ] + oErr1.UserValue.Message 
      ?[     Procedure: ] + oErr1.UserValue.Procedure 
      ?[     Details: ] + oErr1.UserValue.Details 
      ?[     StackLevel: ] + STR(oErr1.UserValue.StackLevel) 
      ?[     LineContents: ] + oErr1.UserValue.LineContents 
      ?[     UserValue: ] + oErr1.UserValue.UserValue 
   result = 0   
FINALLY
   ?[: FINALLY statement executed ] 
ENDTRY
RETURN result


Jorge Kiernan

unread,
Dec 13, 2013, 6:13:04 AM12/13/13
to publicesvfoxpro
más allá de la rutina general de error, que se invoca desde el comienzo, el uso de try ... catch es algo muy útil para manejar excepciones en cualquier procedimiento. Incluso cuando estas depurando algo y no te das cuenta donde está el problema, encerrar la logica en un try facilita mucho las cosas. 
En la sentencia catch agrega un objeto que te permite rescatar el problema. Queda algo asi como 
try 
   instrucciones de lo que sea, donde puede producirse el problema
catch to loerror
     =messagebox('Se ha producido un error '+chr(13)+loerror.message,64,'ATENCION')
endtry 



2013/12/13 HernanCano <jherna...@gmail.com>
Reply all
Reply to author
Forward
0 new messages