FoxPro/Visual FoxPro - ¿Cómo se manejan los errores en VFP??

 
Vista:

¿Cómo se manejan los errores en VFP??

Publicado por Novato (325 intervenciones) el 24/04/2010 22:22:49
Hola a todos los expertos.

Aprendí a programar en VFP 6 y siempre utilicé ON ERROR en el archivo MAIN.PRG (es decir, el archivo de arranque)

Leí en el foro que se puede utilizar

TRY / CATCH / ENTRY

pero NO logro entenderlo.

Mi pregunta básica es:

1) ¿Hay que usarlo en cada formulario ? ¿ o solamente en el archivo MAIN.PRG?

2) Si tuvieran que resumir lo que va en cada parte del comando ¿cómo lo explicarían?

¡¡Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Cómo se manejan los errores en VFP??

Publicado por es_binario (757 intervenciones) el 27/04/2010 17:51:52
El try catch es tan facil como su traducion al español

Dice Try (intenta)

catch (atrapa el error )

finally(al final has)

Bueno y lo debes usar segun si consideras que el programa va a ejecutar una operacion en la que podria no suceder si falta algo o algo no esta bien.

Te pongo un codigo de ejemplo para que te des una idea mas clara.

TRY
LOCAL lcSchema, loConfig, loMsg, loError, lcErr
lcErr = ""
lcSchema = "http://schemas.microsoft.com/cdo/configuration/"
loConfig = CREATEOBJECT("CDO.Configuration")
WITH loConfig.FIELDS
.ITEM(lcSchema + "smtpserver") = "smtp.gmail.com"
.ITEM(lcSchema + "smtpserverport") = 465 && ó 587
.ITEM(lcSchema + "sendusing") = 2
.ITEM(lcSchema + "smtpauthenticate") = .T.
.ITEM(lcSchema + "smtpusessl") = .T.
.ITEM(lcSchema + "sendusername") = "[email protected]"
.ITEM(lcSchema + "sendpassword") = "micontrase;a de mi correo"
.UPDATE
ENDWITH
loMsg = CREATEOBJECT ("CDO.Message")
WITH loMsg
.Configuration = loConfig
.FROM = "micorreo que [email protected]"
.TO = "mis destintarios"
.Subject = "Respaldo de Navojoa Lionas del " +ALLTRIM(DTOC(DATE()))
.TextBody = "Envio de respaldo de de informacion de sistemas Lionas "
.AddAttachment("C:\respaldo.rar")
.Send()
ENDWITH
CATCH TO loError
lcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
[Linea: ] + STR(loError.LINENO) + CHR(13) + ;
[Mensaje: ] + loError.MESSAGE
FINALLY
RELEASE loConfig, loMsg
STORE .NULL. TO loConfig, loMsg
IF EMPTY(lcErr)
MESSAGEBOX("El mensaje se envió con éxito", 64, "Aviso")
quit
ELSE
MESSAGEBOX(lcErr, 16 , "Error")
quit
ENDIF
ENDTRY

Fijate bien, en el try hago la operacion que podria darme un error, por ejemplo esto no funciona en windows 7 por que le falta el componente que utilizo el smtp para enviar correo, y el cath atrapa el error evitando que colapse la aplicacion y me indica el error y termina la aplicacion, si por el contrario la operacion sale bien en el finally me mnda el mensage de que todo ocurrio bien y me el mensage de que la operacion fue exitosa, el finally es opcional, y en el catch podria irse directo al mesge de error y despues del endtry tambien podria contener el mensaje de que la operacion fue exitosa. espero te quede mas claro.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Cómo se manejan los errores en VFP??

Publicado por Novato (325 intervenciones) el 28/04/2010 03:04:21
Gracias!!
Lo voy a probar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tratando de entender....

Publicado por Novato (325 intervenciones) el 28/04/2010 03:34:35
A ver si entendí:
- conviene tener un "ON ERROR" general por las dudas que no salte un error "no previsto"

y también
- tener TRY/ENDTRY en cada parte del programa donde se pueda generar un error, es decir, en todos los eventos donde haya posibilidad de errores...

¿ES ASÍ??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratando de entender....

Publicado por es_binario (757 intervenciones) el 28/04/2010 11:18:40
Asi es, yo nada mas uso el try catch que es la mejor de on error, que solo se mantiene como compatibilidad con los viejos metodos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar