Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Descripcion de errores

Hola amigos

Quisiera saber si Delphi pesee algun objeto que contenga o capture los errores que se producen durante la ejecucion de una aplicacion. En visual Basic existe el objeto "err", que contiene la descripcion del error producido, su numero, etc.
¿En Delphi existe algo similar?, lo que pasa es que estoy trabajando el tratamiento de errores (excepciones) en forma centralizada, es decir cualquier error que se produce durante la aplicacion lo derivo a una funcion que envia el mensaje correspondiente al usuario, el cual decide si reintentar o abadonar el prodedimiento, por lo cual necesito tener la descripcion de cualquier error producido en alguna funcion o procedimiento para enviarsela como parametro a la funcion de tratamiento de errores entes mencionada.


Se agradece cualquier ayuda de antemano.
Responder Con Cita
  #2  
Antiguo 11-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Para manejar centralizadamente los errores (excepciones) podrías colocar una componente TApplicationEvents e implementar su evento OnException.

También podrías definir un procedimiento

Código:
procedure ManejaExcepcion(E: Exception);
begin
...
end;
y en cada bloque try-except declarar un objeto Exception:

Código:
try
...
except
  on E: Exception do
    ManejaExcepcion(E);
end;
// Saludos
Responder Con Cita
  #3  
Antiguo 11-04-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Gracias Roman, pero cuando intento realizar esto:

procedure ManejaExcepcion(E: Exception);
begin
...
end

Me envia el siguiente error "undeclared identifier exception", que me imagino debe ser porque no reconoce el tipo exception como un idehntificador valido, ¿debo declararlo o usarlo (uses) en alguna parte del proyecto?.......
Responder Con Cita
  #4  
Antiguo 13-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Debes incluir la unidad SysUtils

// Saludos
Responder Con Cita
  #5  
Antiguo 13-04-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Gracias Roman

Si fuera posible me gustaria que me ayudaras con lo de las exepciones. Te cuanto, como te he dicho en los anteriores mensajes estoy trabajando las excepciones en forma centralizada, por lo cual, cualquier error ocurrido en la aplicacion se deriva a una funcion que analiza el error y envia el mensaje correspondiente al usuario, mi problema es el siguiente: ¿existe alguna propiedad en las excepciones que me permita idertificar de cual se trata....?, en el siguiente codigo te puede quedar mas clara mi duda:

Function ErroresSistema(ErrorOcurrido: Exception): String;
Begin

if ErrorOcurrido = EDivByZero Then
Begin
......
end

If ErrorOcurrido = ERangeError Then
Begin
......
end

If ErrorOcurrido = EStackOverflow Then
Begin
......
end
.....
.....
end;

La comparacion "ErrorOcurrido = EStackOverflow", no es valida ya que "ErrorOcurrido" es un objeto de tipo exception y "EStackOverflow", es un valor que hace referencia al error ocurrido. ¿existe alguna propiedad del objeto exception que referencie de alguna forma al identificador del error ocurrido y que sea comparable de esta forma "ErrorOcurrido.xxxxx = EStackOverflow", de manera que sean tipos compatibles para la comparacion?....Si existe otra manera de compar tambien podria ser una alternativa...


Cualquier ayuda se agradece de antemano.
Responder Con Cita
  #6  
Antiguo 13-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Por ejemplo

Código:
if ErrorIcurrido is EDivByZero then
// Saludos
Responder Con Cita
  #7  
Antiguo 13-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Un comentario:

No sé qué tam buena idea sea tratar de centralizar todo el manejo de errores. No se trata sólo de saber qué tipo de excepción se originó. Una misma excepción puede originarse por muy diversos motivos y por ende la forma de salir de ella puede variar según el caso. En tu manejador centralizado no tendrás forma de saber en qué contexto se originó la excepción ni cuál es la medida adecuada para salir de ella.

// Saludos
Responder Con Cita
  #8  
Antiguo 13-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Yo creo que la mencionada "centralización" de manejo de excepciones podria tener sentido solo para llevar un registro (log) de las mismas... pero poco sentido tiene "manejarlas" de forma centralizada, ya que se pierde la filosofía misma que soporta las excepciones: Tratar los errores lo mas cerca posible de donde se producen, manteniendo un mecanismo que permite cada vez ir mas "fuera" del código.

Si lo haces de forma "centralizada"... cómo podrias reintentar una operación sin saber siquiera donde se ha originado???

Quizas se pueda crear un par de funciones especializadas en ciertos tipos de errores, que sean invocadas desde las clausulas except... pero el manejo de excepciones debe mantenerse alli, y como sana práctica de programación, lo que tienda a fallar y quiera ser controlado, debe seguir metiendose entre clausulas try except end.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 13-04-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Hola amigosGracias de nuevo roman. Quisas mi idea de centralizar el manejo de errores no ha sido bien explicada de mi parte. Obviamente cada error obedece a condiciones y eventos distintos y como tal, estos deben ser tratados en forma particularizada e individual, cuestion que de preferencia debe ser atendida dentro del mismo procedimiento o funcion, pero los mensajes que se le envian al usuario por causa de estos errores, si pueden ser tratados en forma centralizada, ya que un error en si, es siempre el mismo, lo que cambia es la causa que lo provoco, causa que puede ser enviada como parametro a la funcion que maneja el envio de mensajes por los erros producidos. Quisas un mejor nombre para mi idea seria: manejo centralizado de los mensajes de error.
Ya que estamos hablando de los errores, me asalta otra duda, ¿una vez producido un error y capturado en la estructura try.....except, es posible volver la ejecucion a la misma linea o linea siguiente en la que se produjo el error?, esto podria ser util cuando el error se deba a causas del entorno (las cuales pueden cambiar de un momento en otro), por lo cual el error seria recuperable, reintentando utilizar el mismo codigo en donde se genero....

De antemano se agradece cualquier ayuda.
Responder Con Cita
  #10  
Antiguo 13-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Hola senpiterno

Te recomiendo, de acuerdo a la guía de estilo de los foros, que para esta nueva pregunta habras un nuevo hilo.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:12:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi