Evitar que aparezca mensajes de error, si ya tengo un programa de errores??

425 views
Skip to first unread message

Saul Piña Hernandez

unread,
Jun 6, 2015, 11:47:10 AM6/6/15
to publice...@googlegroups.com
Saludos, ya cuento con una rutina para generar errores (Ejemplo que solo pude encontrar aquí)  bueno mi pregunta es,

¿Se puede evitar que se muestre el mensaje original de error, pues se supone que ya tengo una rutina de errores y me basta con ella.


Saludos.


francisco prieto

unread,
Jun 6, 2015, 12:01:13 PM6/6/15
to publice...@googlegroups.com
Argentina

Saul Piña Hernandez

unread,
Jun 6, 2015, 12:19:27 PM6/6/15
to publice...@googlegroups.com, fajp...@gmail.com
Traté de agregarlo al main un Try Catch. Pero no me funciona.

Este es un fragmento en el Main


Try
do form login.scx
Read events

Catch

endtry





Fernando D. Bozzo

unread,
Jun 6, 2015, 1:14:50 PM6/6/15
to publice...@googlegroups.com, vfxpro...@gmail.com, fajp...@gmail.com
Hola Saúl:

Si crees que con un try/Catch, como el que mostrás, ya tenés todo el control solucionado, estás bastante equivocado.

Realmente no diste ninguna pista útil de lo que pasa: ¿Qué es exactamente lo que pasa y dónde muestra el error? ¿Qué error es? ¿Una captura de pantalla?

¿Conocés bién como funciona try/catch? Yo ya había hecho un artículo sobre el mismo, además de haber incluido una sección dedicada al mismo en el artículo de trabajo en capas.


Saludos.-

Julián May

unread,
Jun 7, 2015, 2:58:47 AM6/7/15
to publice...@googlegroups.com, vfxpro...@gmail.com
Try Catch 

Como te dicen los colegas pero ? 

Sabes como funciona como te comenta Fernando? 

Sirve para controlar tus errores y puedes hacer una especie de log con el error real y bien personalizar tus mensajes de error al usuario final.
Pero dale una leída así como lo tienes parece que quieres controlar todo lo que va pasar después de ejecutar el form pero no es la forma correcta.


Saludos.

integral

unread,
Jun 7, 2015, 3:55:16 PM6/7/15
to publice...@googlegroups.com, vfxpro...@gmail.com

Amigo SAUL .

Adjunto un archivo en formato PDF donde encontraras varios ejemplos acerca del uso de TRY titulado
Control de Errores en VFP 8.por LES PINTER

Espero te sea de utilidad

Saludos,

INTEGRAL
Control de Errores en VFP 8.0.pdf

Edwin Duran

unread,
Jun 9, 2015, 1:30:39 PM6/9/15
to publice...@googlegroups.com, vfxpro...@gmail.com
Saludos Saul

Como te comentan los demás es la mejor opción para controlar errores, yo lo utilizo en los lugares, donde hay errores por causas externas, anexo ejemplo del try, ademas, te anexo la funcion mostrarMensajeError() para guardar el error en un archivo txt, por si el usuario no sabe explicar que error fue,

saludos


LPROCESAR = .F. &&para controlar si se produjo un error

Try
osqldata=Createobject("sqldata.sqldata")
osqldata.psqlcomienzo(_Screen,"1")
If Used("samovimiento")
Use In samovimiento  
Endif

mtxtbusqueda          = Thisform.txtnum_mov.Value
mtxtbusqueda1         = Alltrim(Thisform.cobtipo_mov.Tag)
MTABLA =_Screen.sqldatabase+"samovimiento"
Msadetalle_mov2 =_Screen.sqldatabase+"saitem"

TEXT TO cmd NOSHOW text
SELECT * from <<MTABLA>> where num_mov=<<mtxtbusqueda>> AND tipo_mov= '<<mtxtbusqueda1>>' and UPPER(posteado) ='NO'
ENDTEXT


osamovimiento=Createobject("cursoradapter")
osqldata.psqlejecutar(_Screen,"1",Thisform,osamovimiento,"consultag","samovimiento",MTABLA,cmd)
= CursorSetProp('Buffering', 3, 'samovimiento' ) &&por defecto es 5
osqldata.psqlfinal(_Screen,"1")


LPROCESAR = .T.
Catch To oError
=mostrarMensajeError("Debido a un error no se buscaros los datos.  Intente nuevamente",oError)
LPROCESAR = .F.
Finally
Endtry

If LPROCESAR = .F.
** aqui coloco el codigo por si hay error 
Endif
 
******************************************************
Procedure mostrarMensajeError(titulo,oError)
* uso =mostrarMensajeError("Error actualizando los datos",oError)

Local msj, causa, solucion, M.numerror, M.tab, M.consulte, M.contador,nomprog, lcnombre_usuario
*Set Step On
Store "" To M.msj, M.causa, M.solucion, lcnombre_usuario

*If !Pemstatus(_Screen, "MiToolbar", 5)
If !Pemstatus(_Screen, "MiToolbar.Container1.TEXT1.value", 5)
lcnombre_usuario ="El usuario no se ha validado"
Else
lcnombre_usuario = _Screen.MiToolbar.Container1.TEXT1.Value

Endif



nomprog = _Screen.softname && nombre del programa
m.numerror = oError.ErrorNo
m.tab = "   "
m.consulte = "Consulte con su administrador del sistema."
m.msj = oError.Message+Iif( .Not. Empty(Sys(2108)), " ("+Sys(2108)+")", "")

If Empty(M.solucion)
m.solucion = M.consulte
Endif

**Aqui se muestra el mensage de error
?? Chr(7)+Chr(7)
=Messagebox(titulo+Chr(13)+;
oError.Message+Chr(13)+;
"Error       #:"+Transform(oError.ErrorNo)+Chr(13)+;
"Linea       #:"+Transform(oError.Lineno)+Chr(13)+;
"Contenido   #:"+Transform(oError.LineContents)+Chr(13)+;
"Procedimeinto:"+oError.Procedure+Chr(13)+;
"Detalle      :"+oError.Details+Chr(13)+;
"StackLevel   :"+Transform(oError.StackLevel)+Chr(13)+;
m.consulte+Chr(13)+;
"--------------"+Chr(13),48,"Error")


**aqui guardamos los datos en el archivo texto

*Pop Key All
Clea Typeahead
Set Console Off
Set Printer Off
Set Printer To
Clea Typeahead
Do While  .Not. Empty(Inkey())
Enddo
Clea Typeahead

Set Console Off


If M.numerror<>6
If File(_Screen.Ruta_WorkingDirectory+"ERROR_TAB.TXT")
Set Alternate To (_Screen.Ruta_WorkingDirectory+"ERROR_TAB.TXT") Additive
Else
Set Alternate To (_Screen.Ruta_WorkingDirectory+"ERROR_TAB.TXT")
Endi
Set Alternate On

Endif



?
? Replicate("*", 60)
? "Programa ................:", Alltrim(_Screen.softname)
? "Empresa .................:", Alltrim(_Screen.empresa) &&NOMBRE DE LA EMPRESA
? "Versión .................:", _Screen.Version  &&version del progrma
? "Usuario .................:", lcnombre_usuario
? "Fecha y hora ............:", Datetime()
?
? "Error número ........... :", Ltrim(Str(m.numerror)), ":", M.msj
If Message(1)<> Message()
? "Orden errónea ...........:", Message(1)
Endif
If  .Not. Empty(Ferror())
? "Error de bajo nivel .....:", Ltrim(Str(Ferror()))
Endif
? "Error Linea .............: ", Transform(oError.Lineno)
? "Contenido ...............: ", Transform(oError.LineContents)
? "Procedimeinto ...........: ", oError.Procedure
? "Detalle .................: ", oError.Details
? "StackLevel...............: ", Transform(oError.StackLevel)
?
? "Alias seleccionado ......:", Alias()
? "Filtro ..................:", Filter()
? "Directorio de trabajo ...:", _Screen.Ruta_WorkingDirectory
? "Directorio de temporales :", Sys(2023)
?
? "Programas en ejecución"
? "--------------------------------------------------------"
If Type("_screen.activeform") = "O" And Type("_screen.activeform.activecontrol") = "O"
? "Formulario ..............:", Alltrim(_Screen.ActiveForm.Name)
?
Endif

If Type("_screen.activeform") = "O" And Type("_screen.activeform.activecontrol") = "O"
? "Objeto actual ...........:"+Sys(1272, _Screen.ActiveForm.ActiveControl)
?
Endif

For x = 1 To 128
If Empty(Program(x))
Exit
Endi
? Program(x)
Endf
?
Set Alternate Off
Set Alternate To
Clos Alternate
Set Console Off

*=msg("El programa se detendra debido al error mostrado anteriormente, favor contacte al administardor del sistema.")

*If Type('If Type('_Screen.ActiveForm')='o'')='O'
* _Screen.ActiveForm.Release()
*Endif



Endproc


Fernando D. Bozzo

unread,
Jun 9, 2015, 1:53:48 PM6/9/15
to publice...@googlegroups.com
Hola Edwin:

Tu rutina principal es una rutina de acceso a datos pura. Si esto lo trabajaras en capas, la rutina que muestra el error no iría ahi, sino en la interfaz.


Saludos.-


Fernando D. Bozzo

unread,
Jun 9, 2015, 1:59:40 PM6/9/15
to publice...@googlegroups.com, vfxpro...@gmail.com
Hola Saúl:

Dejaste este hilo colgado junto a todos los que te estaban respondiendo.
No está bien eso, sería mejor si terminás de exponer el tema en vez de ir abriendo hilos sobre lo mismo.

Saludos.-



El sábado, 6 de junio de 2015, 17:47:10 (UTC+2), Saul Piña Hernandez escribió:

Saúl Piña

unread,
Jun 10, 2015, 3:43:35 PM6/10/15
to publice...@googlegroups.com, fdb...@gmail.com
Saludos Fernando, Estoy utilizando un pequeño ejemplo de tu articulo e intencionalmente he puesto un lcTabla (que yo sé que no existe) para ver que funciona Try Cath pero me muestra el mensaje típico de VFP, es normal esto?


El codigo es el siguiente:

TRY
      LOCAL loEx as Esception
      loEx = NULL
      MESSAGEBOX(lcTabla)
   CATCH TO loEx

   FINALLY
      IF NOT ISNULL(loEx)
         MESSAGEBOX( "Error " + TRANSFORM(loEx.ErrorNo) + ", " + loEx.Message )
      ENDIF

      * Recolección de basura
   ENDTRY

Fernando D. Bozzo

unread,
Jun 10, 2015, 5:00:26 PM6/10/15
to publice...@googlegroups.com, saulpi...@gmail.com, fdb...@gmail.com
Hola Saul:

Tu programa de ejemplo funciona perfecto y muestra el error que se espera que muestre, como ves en la captura, aunque definiste mal al inicio el "as Esception" que debería ser "as Exception", pero como es solo para Intellisense, eso no da error.

¿A vos te muestra algo distinto a esto?


Saul Piña Hernandez

unread,
Jun 10, 2015, 8:29:59 PM6/10/15
to publice...@googlegroups.com, fdb...@gmail.com, saulpi...@gmail.com

Es correcto, esperaba que me mostrase algunas cosas mas, por ejemplo en cual proceso se originó ese error, pantalla, etc.

Digamos si yo quiero que me controles todos los errores del sistema, debo poner esto mismo en el main principal? En que lugar deberia poner?

estoy haciendo pruebas...


Fernando D. Bozzo

unread,
Jun 11, 2015, 1:19:50 AM6/11/15
to publice...@googlegroups.com

Saúl, el objeto Exception tiene varias propiedades, si solo usas ErrorNo y Message, te va a mostrar eso, por lo tanto tenés que mostrar mas propiedades.
Realmente es tan fácil como leer la ayuda de Exception y sus propiedades para ver cuál te sirve .

Es importante que conozcas y entiendas los objetos con los que trabajas, y no dejes de leer la ayuda, que vas a ahorrar mucho tiempo.

Saludos

Edwin Duran

unread,
Jun 11, 2015, 7:33:15 AM6/11/15
to publice...@googlegroups.com, fdb...@gmail.com
Buen dia Fernando

Gracias por tu comentario, y disculpa, no entendí tu observación, puedes darme un ejemplo para entenderte.

Fernando D. Bozzo

unread,
Jun 11, 2015, 10:40:20 AM6/11/15
to publice...@googlegroups.com
Hola Edwin:

En su momento hice un artículo sobre control de errores donde al final pongo un ejemplo con todos los parámetros, que además están explicados en la ayuda:

Desmitificando el control de errores con Try/Catch


Saludos.-

Reply all
Reply to author
Forward
0 new messages