FoxPro/Visual FoxPro - Otra vez excepciones (2da parte)

 
Vista:

Otra vez excepciones (2da parte)

Publicado por María Claudia (91 intervenciones) el 23/08/2007 13:55:26
Hola a todos otra vez

Tengo un formulario donde cargué un objeto OLE (donde previamente tuve que registrar un archivo OCX)

Todo funciona bien, pero hay un caso que me tira un "Error de excepción del objeto OLE"

El otro día, en otro post, me indicaron el código para capturar una excepción o error.

Pero este error aparece con un código Hexadecimal

1) El código para capturar el error del OLE ¿va en el evento ERROR EVENT?
2) En ese caso, en el Error Event del Form o del objeto Ole?
3) ¿Cómo trabajo con los errores en hexadecimal???

Muchas gracias

María Claudia
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:Otra vez excepciones (2da parte)

Publicado por Plinio (7841 intervenciones) el 23/08/2007 14:40:53
Y por que no averigua mejor el motivo del error?
Por un ejemplo un valor a una propiedad de un tipo de datos no esperado, o un valor esperado que no pusiste, etc.
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:Otra vez excepciones (2da parte)

Publicado por María Claudia (91 intervenciones) el 23/08/2007 14:58:03
El error es ESPERADO (viene con el manual) cuando una impresora por puerto Serie no está encendida.

Para hacerla funcionar, se necesita cargar previamente el archivo OCX e insertar el objeto OLE. (Es una impresora fiscal)

Todo funciona bien. Simplemente que hay un solo error (Hexadecimal 80040204 o Err_timeout) que se produce cuando la impresora no está encendida o cuando no hay comunicación con el puerto serie.

Por eso, lo que necesito hacer es que cuando se genera ese error (solamente ese) aparezca un cartel que diga "La impresora está apagada - Intente nuevamente" o algo así

Si me pueden ayudar, se los agradezco

María Claudia
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:Otra vez excepciones (2da parte)

Publicado por Plinio (7841 intervenciones) el 23/08/2007 15:29:12
Verifica si AERROR() te ayuda.
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
Imágen de perfil de Jaime Gattorno

RE:Otra vez excepciones (2da parte)

Publicado por Jaime Gattorno (3 intervenciones) el 24/08/2007 17:09:49
Hola Maria Claudia, espero no llegar tarde a ayudarte, esto es lo que puedes hacer, te envio una rutina para trabajar con errores.

ON ERROR DO ctrlerr WITH ;
ERROR(), MESSAGE(), MESSAGE(1), PROGRAM(), LINENO();
IN SubProg

* Rutina de error
PROCEDURE CtrlErr(merror, mens, mens1, mprog, mnumlin)
SET TALK OFF
SET DEVICE TO SCREEN

* Llamado a esta funcion
* ON ERROR DO ctrlerr WITH ;
* ERROR(), MESSAGE(), MESSAGE(1), PROGRAM(), LINENO()

* Alguien ya está usando ese archivo. (108) Error
* Ha intentado utilizar (USE), eliminar (DELETE)
* o cambiar el nombre (RENAME) de un archivo que
* está utilizando otro usuario de la red.

* Denegado el acceso a archivo. (1705). Ha intentado
* escribir en un archivo que se ha protegido contra
* escritura mediante el comando ATTRIB del MS-DOS.

*** La línea siguiente deberá provocar un error ***

* USE noexiste
* ON ERROR && restaurar el controlador de errores del sistema
DO CASE
CASE merror = 5
=Error5()
ON ERROR DO ctrlerr WITH ;
ERROR(), MESSAGE(), MESSAGE(1), PROGRAM(), LINENO();
IN SubProg
CASE merror = 1705 .OR. merror = 108
Mens1 = 'Ha intentado habrir un archivo ocupado por otro usuario'
CASE merror = 125
Mens1 = 'La impresora no está en linea o no tiene papel, verifique'
ENDCASE

cNota1 = 'Error # '+ LTRIM(STR(merror)) + ' ' + mens + Chr(13) + ;
'Error en codigo linea ' + LTRIM(STR(mnumlin)) + Chr(13) + ;
AllTrim(Left(mens1,50)) + Chr(13) + ;
'Error en Programa: ' + mprog

nElec = MessageBox(cNota1,37,"Advertencia")

DO CASE
CASE nElec = 1
IF merror = 125
SET DEVICE TO PRINT
merror = 0
mens = Space(20)
mens1 = Space(20)
mprog = Space(11)
mnumlin = 0
ENDIF

RETRY
OTHERWISE
IF merror = 1705 .OR. merror = 108 .OR. merror = 125
merror = 0
mens = Space(20)
mens1 = Space(20)
mprog = Space(11)
mnumlin = 0
RETURN TO MASTER
ELSE
merror = 0
mens = Space(20)
mens1 = Space(20)
mprog = Space(11)
mnumlin = 0
CANCEL
ENDIF
ENDCASE
* 'N£mero de error: ' + LTRIM(STR(merror))
* 'Mensaje de error: ' + mens
* 'L¡nea de c¢digo con error: ' + mens1
* 'N£mero de l¡nea de error: ' + LTRIM(STR(mn£ml¡n))
* 'Programa con error: ' + mprog

RETURN
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