Programación General > Visual Basic 6.0 e inferiores
Re: Objeto Error
chiaravel:
Hola Amigos.
Tengo toda una Aplicacion de Comunicaciones que me esta dando problemas y errores de ejecucion, pero a la hora de depurar esos errores me encuentro con el maldito objeto error.
Lo unico bueno que puede hacer este objeto es darme un Nro.de error y un mensaje, pero yo necesito saber cual es la instruccion que falla ya que el famoso ON ERROR GOTO xxxxx se dispara automaticamente sin que uno pueda saber desde que linea se disparo.
Yo podria colocar en cada linea una variable y ir numerandola cosa de leer ese numero en la rutina de error, pero eso es del tiempo de las cavernas, y calculo que habiendo tantos controles espectaculares y sofisticados, el VB tenga un objeto Error tan malo.
Si alguno conoce otro objeto que se pueda usar o algun truco para manejar esto, PLEASE ....Ayudenme.
Muchas Gracias
:ayuda::ayuda::ayuda:
chiaravel:
Antes de que aconsejen el uso del depurador o Debuging les cuento que esta aplicacion se deja corriendo toda la noche para que al dia siguiente a la manana cuando nosotros llegamos , tenemos toda la informacion transmitida (por la noche) de nuestras sucursales.
Por ese motivo no estamos presentes durante la ejecucion de la aplicacion.
:adios:
acalanto:
Pufff verdaderamente nos metemos de lleno en un tema realmente complejo..el tratamiento de los errores y mucho más si lo que deseamos es que estén desatendidos (Tu aplicación de comunicaciones que puede fallar por 20001 razones que nada engan que ver con el código).
El único consejo que se me ocurre es que procures dar a la aplicación la mayor robustez posible e intentar que ella misma salga airosa de las situaciones de error.
No existe posibilidad de que conozcas la sentencia en la que se ha producido el error (ErrorLine y ErrorDesxription), salvo que escribas el código como en los primeros Basic
10 hago esto
20 hago esto otro
30 lo de más llá
...etc
En una aplicación que tengo para seguimiento de túneles (Instalada en diversos clientes dispersos geográficamente) relalizé un tratamiento mas o menos primitivo pero que me da buen resultado ante posibles errores P. EJ.
OPTION EXPLICIT
PUBLIC PROCNAME AS STRING
SUB UNPROCEDIMIENTO(PAR1 AS BYTE, PAR2 AS VARIANT)
ON LOCAL ERROR RESUME CAPTURAERROR
PROCNAME="UNPROCEDIMIENTO"
PROC001:
CODIGO
CODIGO
CODIGO
PROC002:
MASCODIGO
MASCODIGO
PROC003:
MASCODIGO
MASCODIGO
EXIT SUB
CAPTURAERROR:
MSGBOX "ERROR: "+CSTR(ERR)+" EN ETIQUETA: " +CSTR(ERR.LINE)+ "EN PROC/FUNC: " + PROCNAME
<AQUI LO QUE DESEES REALIZAR PARA TRATAR EL ERROR>
END SUB
Esto te permite conocer en que proceso y entre que etiquetas se ha producido el error y así revisar el código para eliminar los posibles Bugs. (Si es que tiene alguno)
En tu caso el error se puede producir, no por un error de código, sino por un fallo en las comunicaciones, protocolos, módem etc. etc.
Yo te aconsejaría que uses la variante RESUME NEXT y si detectas un error provocado por causas ajenas al código (Es decir fallo en comunicación, el equipo de la delegación está ocupado etcetc), generas un fichero de LOGS en el cual introduces la delegación, los datos no enviados e incluso el número de error y etiqueta en al que se produce.
Acto seguido pasaas a la siguiente delegación y así sucesivamente.
Cuando termine la última, la aplicación deberá de revisar si hay cosas en el fichero log (Una epsecie de COLA DE IMPESIÖN). Si es así relizar un nuevo intento y en caso de no conseguirlo, por la mañana tendrás un informe detallado de todo aquello que no ha podido enviar y tomar las medidas correctoras oportunas.
Espero haberte ayudado
Un saludo
-Acalanto-
END SUB
chiaravel:
En cuanto al RESUME NEXT y al manejo de un archivo LOG con toda la informacion, y al reintentar la comunicacion cuando algo falle, estamos de acuerdo.
De hecho la aplicacion esta disenada de esa manera.
En cuanto al ejemplo que vos me indicas, te cuento que el objeto ERROR no tiene ninguna propiedad ERR.LINE.
Agradezco mucho tu ayuda.
Un Abrazo
acalanto:
Perdona, me he equivocado por hacerlo al vuelo y de memoria.
La sentencia que devuelve la línea o la etiqueta más próxima a la que se produce el error es:
ERL
Espero que esto si te sirva y perdona la confusión
Un saludo
-Acalanto-
Navegación
[#] Página Siguiente
Ir a la versión completa