FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como Capturar Nombre u Origen en Control de Errores
Hola a todo/as:
Tengo un código de control de errores que se asigna desde el create o activate de una forma, cuando envia la excepción la captura bien y crea un archivo Log pero no he podido capturar el nombre del componente que la genera...si me pudieran dar una mano se los agradeceria... //** en el create... Application.OnException:=controlErrores; procedure TForm1.controlErrores(Sender: Tobject; E: Exception); //** Gina Ma Silva Mejia Controla los errores no controlados de la aplicación por try o onexception var sMensaje,ls_cadena,path,ls_opcion,b : string; i,j : integer; a: ShortString; begin path := ExtractFilePath(ParamStr(0)); /** toma el path desde donde se ejecuta la aplicacion if E is EDivByZero then sMensaje := 'ERROR: División Por Cero' else if E is ERangeError then sMensaje := 'ERROR: Rango Erróneo' else if E is ERangeError then sMensaje := 'ERROR: Desbordamiento' else if E is EConvertError then sMensaje := 'ERROR: Número No Válido' else if E is EIntOverflow then sMensaje := 'ERROR: Entero Demasiado Grande' else if E is EConvertError then sMensaje := 'ERROR: Número No Válido' else if E is EDBEngineError then sMensaje := 'ERROR en la Base de Datos' else if E is EAccessViolation then sMensaje := 'ERROR de Memoria' else if E is EListError then sMensaje := 'ERROR: La lista esta Vacia' else sMensaje := 'ERROR: Error General'; RichEdit12.Lines.Clear; RichEdit12.PlainText := True; /** en esta variable b pretendo capturar el nombre del sender que genero la excepcion pero me ha tocado asi: b:=''; if sender.ClassName = 'TTimer' then b:= TTimer(sender).Name; if sender.ClassName = 'TStringGrid' then b:= TStringGrid(sender).Name; if sender.ClassName = 'TCheckListBox' then b:= TCheckListBox(sender).Name; if sender.ClassName = 'TSpeedButton' then b:= TSpeedButton(sender).Name; ls_cadena:= formatdatetime('dd/mm/yyyy hh:mm:ss',now())+' '+b+' '+ Sender.ClassName +' '+E.ClassName +' '+E.Message; Memo13.Lines.Add(ls_cadena); for i := 0 to Memo13.Lines.Count - 1 do begin ls_cadena := Memo13.Lines.Strings[i]; RichEdit12.Lines.add(ls_cadena); end; RichEdit12.Lines.SaveToFile(path +'\Log.txt'); end; with TFrmMensajes.Crear(Self, sMensaje, E) do ShowModal; end; /*** tienen un form TFrmMensajes para mostrar el error... unit UnitMensajes; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TFrmMensajes = class(TForm) Panel1: TPanel; BtnDetalles: TButton; STDetalles: TStaticText; Panel2: TPanel; STError: TStaticText; BitBtn1: TBitBtn; procedure BtnDetallesClick(Sender: TObject); public { Public declarations } constructor Crear(AOwner: TComponent; Mensaje: string; E: Exception); end; var FrmMensajes: TFrmMensajes; implementation {$R *.DFM} constructor TFrmMensajes.Crear(AOwner: TComponent; Mensaje: string; E: Exception); begin inherited Create(AOwner); Height := 130; //****Recibe un mensaje de error y una excepción. STError.Caption := Mensaje; STDetalles.Caption := E.ClassName + ': ' + E.Message; end; procedure TFrmMensajes.BtnDetallesClick(Sender: TObject); begin if BtnDetalles.Caption = '>> Detalles' then begin height := 230; BtnDetalles.Caption := '<< Detalles'; end else begin height := 130; BtnDetalles.Caption := '>> Detalles'; end end; end. |
#2
|
||||
|
||||
Se veria mejor asi...
__________________
Web |
#3
|
|||
|
|||
mmm... gracias pero no se como hacerlo....
|
#5
|
||||
|
||||
En lugar del.:
Yo colocaría algo así; Te evitas tener que hacer todos los IF y aprovechas que todos los componentes derivan de TComponente que ya tienes Name y ClassName:
Por lo demás eso debvería devolver el nombre del componente que genera la excepción correctamente. De todas forma con el código que tú tienes yo inicializaría la "b" con otro valor para ver si realmente no te lo está almacenando y usuaría ELSEIF:
Por que puede ser que esté pasando por el IF, pero no sea ninguno de los que tienes codificados. La otra opción (que ya te he comentado) es que cambies toda esa estructura por la comentada arriba, para que funcione con cualquier Sender que derive de TComponent.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
oye muchas gracias... funciona perfecto!!...
|
#7
|
||||
|
||||
Esta viendo el código que habéis puesto en este hilo. Aunque es para Delphi es fácil adaptarlo a Builder, que es lo que me hace falta. Me suge una duda: ¿Existe la posibilidad de poder capturar además del nombre del componente que genera la excepción el del formulario donde se ubica?
Voy un poco más allá: Hay casos en los que la excepción no se genera en un componente concreto, como puede ser una fución llamada; ¿como podría capturar la línea en la que se produce el error? |
#8
|
||||
|
||||
Cita:
(no lo he compilado, te lo pongo de memoria, pero la idea es esa)
Algo similar habrá que hacer para los frames, si es que los usas. Cita:
Pertenece a las Jedi y te permite ampliar las opciones de debug, con cosas que se acercan a lo que necesitas. Otras opciones que puedes investigar son: madExcept, EurekaLog o similares.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
||||
|
||||
Muchas gracias por la sugerencia. Probaré y ya os diré como va.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Capturar errores de sql | piccolo2101 | SQL | 3 | 20-01-2006 11:21:04 |
como capturar errores con los componentes zeos...... | chileno | Conexión con bases de datos | 1 | 05-01-2006 16:53:39 |
Capturar errores | Mauricio_M | Firebird e Interbase | 6 | 18-10-2005 21:28:04 |
Control de errores Sql | MITOPE | Conexión con bases de datos | 3 | 23-07-2004 10:48:49 |
Control de errores en bd | Isaac | Varios | 5 | 17-02-2004 19:19:34 |
|