Delphi - Manejar excepciones

 
Vista:

Manejar excepciones

Publicado por kikecg (33 intervenciones) el 12/12/2003 20:17:28
Hola.
A ver si alguien me echa una mano.
Necesitaría saber cómo manejar excepciones de modo que en vez de mostrarse la excepción en pantalla, se envíe el texto como cadena a un procedimiento que me lo escribe en un archivo log. Este procedimiento ya lo tengo creado y operativo.
Lo que necesitaría es saber como hacer para que no se ejecute el ShowException, y que en su lugar se llame a mi procedimiento con el texto de la excepción como parametro.
Ademas, quería también saber si los errores que me pueda dar un TAdsTable (descendiente de TDataSet) se manejan también como excepciones o no.
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:Manejar excepciones

Publicado por Luciano J DG (15 intervenciones) el 13/12/2003 16:50:37
Lo que puedes hacer es:
try
...
except
// haces tu llamada al rocedimiento que almacena el mensaje en el log...
end

y de la misma forma puedes manejar las excepciones de TAdsTable
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:Manejar excepciones

Publicado por BigLuis (463 intervenciones) el 13/12/2003 17:19:48
Puedes crear un procedimiento como este por ejemplo:
procedure TFormPrincipal.ControlErrores(Sender:TObject;E:Exception);
var
Mensaje :String;
begin
if E is EDateTimeError then
Mensaje:= 'ERROR : Debe introducir la Fecha/hora correctamente'+#13+#13+
' Separador de Fecha : "/" , Separador de Hora : ":"'
else
if E is EInvalidGraphic then
Mensaje:= 'ERROR : Gráfico no soportado por el programa'
else
if E is EExternalException then
Mensaje:= 'ERROR : se ha producido un error externo al programa'
else
if E is EDivByZero then
Mensaje:= 'ERROR : no se puede dividir por "0"'
else
if E is ERangeError then
Mensaje:= 'ERROR : Rango erróneo'
else
if E is EOverflow then
Mensaje:= 'ERROR : desbordamiento'
else
if E is EConvertError then
Mensaje:= 'ERROR: dato introducido no válido'
ELSE
IF E is EDBEngineError then
Mensaje:= 'ERROR del motor de Base de Datos'
else
if E is EInOutError then
Mensaje:= 'ERROR : en la apertura/cierre de un fichero'
else
if E is EInvalidOperation then
Mensaje:= 'ERROR : operacion no válida'
else
mensaje:= 'ERROR general';
MiProcParaelLog(E,mensaje);
end;
Doy por supuesto que el procedimiento para escribir el Log esta declarado de la siguiente forma MiProcParaelLog(E:Exception,mensaje);
al recooger los parametros puedes utilizar E.Classname,E.Message etc.
y al crear la aplicacion (OnCreate) haces esta asignacion
Application.OnException:=ControlErrores;
Suerte
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:Manejar excepciones

Publicado por Delfino (1216 intervenciones) el 15/12/2003 15:56:56
Esa es la mejor solucion BigLuis,tu si q sabes, solo q hay un control llamado TApplicationEvents para no tener q hacer la asignacion al final, lo pones directamente en el evento onexception de ese control..
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:Manejar excepciones

Publicado por Luciano J DG (15 intervenciones) el 15/12/2003 20:15:23
Es verdad Delfino, yo no considere que kikecg queria guardar en el log el mensaje de error que devulve Delphi, pero bueno... mi intencion es la de todos los que estamos en este foro.. la de "tratar" de ayudar a otros.
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:Manejar excepciones

Publicado por kikecg (33 intervenciones) el 15/12/2003 16:42:22
Ok, gracias a todos. Voy a probar con el TApplicationEvents y a ver que sale.
La llamada al procedimiento para escribir el log la hago enviandole sólo el texto a escribir. Por tanto lo que necesito saber es como saco el mensaje de la excepción (descripción o como querais llamarlo).
Gracias de nuevo.
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:Manejar excepciones

Publicado por BigLuis (463 intervenciones) el 15/12/2003 16:52:43
Como el procedimiento MiProcParaelLog(E:Exception,mensaje); recoge la excepcion completa aparte de tu mensaje, puedes utilizar E.Message para saber el mensaje que contiene (en ingles, es por eso de las asignaciones previas que hice para las excepciones mas usuales).Luego tu en el Logo escribes lo que quieras.
Suerte
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