jsc
16-09-2011, 11:11:40
tengo una aplicacion casi acabada y tengo intencion de instalarla en un pc donde otra persona pueda trastear y hacer de todo con ella, de modo que de pie a que surjan posibles errores. dicen que cuatro ojos ven mas que dos asi que a modo de poder depurar errores de la aplicacion creo que no es mala idea
se me ha ocurrido hacer un fichero Log.txt en el que poder recoger cualquier incidencia de la aplicacion pero no se el metodo correcto para hacer esto;
haciendo pruebas, he conseguido añadir el error en el fichero pero claro, solo desde el evento de un objeto; es decir, por ejemplo si pulso el boton de conectar a la bd y se generara un error, llamo a la funcion para añadir el error en el fichero y lo agrego;bien, pero esto quiero hacerlo desde todos los objetos que tenga en la aplicación?tengo que llamar desde cada uno de ellos a dicha función como se me ocurre a primera vista?claro, si esto es asi, cómo puedo llamar desde otro formulario a un procedimiento del FormPrincipal?
existe alguna posibilidad a nivel de la aplicacion de controlar si existiera alguna excepcion llamar a la función?
El fichero Log.txt, ya estaria creado y solo se tendria que añadir el error en el: fecha, hora, nombre del formulario,nombre del objeto,error
lo que he conseguido hasta ahora es esto:
procedure registrolog (FormName,NomObjeto,S:string) ;
var Fich : TextFile ;
begin
if FileExists (ExtractFilePath(Application.ExeName)+'\Log\Log.txt')
then
begin
AssignFile (Fich,ExtractFilePath(Application.ExeName)+'\Log\Log.txt') ;
Append (Fich) ;
Writeln (Fich,DateToStr(Date),' ',TimeToStr(Time),' ',' ',FormName,' ',NomObjeto,' ',S);
Flush (Fich) ;
CloseFile (Fich) ;
end ;
end;
llamada al procedimiento
TRY
tablepwd.Active := False ; //pongo false en lugar de true para generar queriendo la excepcion y ver el resultado de lo que seria agregar el error en el fichero
if meditclave.Text = tablepwd.fieldbyname('clave').asstring then
...
EXCEPT ON Error:Exception do
begin
tablepwd.close ;
Messagedlg ('Error al abrir la Base de Datos'+#13+#13+'Error del Sistema: '+Error.Message,mtError,[mbOK],0);
REGISTROLOG (Screen.ActiveForm.Name,(Sender as TSpeedButton).name,Error.Message) ;
end;
END;
linea añadida en el fichero:
16/09/2011 11:05:42 frmmenu sbconectar tablepwd: Field 'clave' not found
Ya si no es mucho pedir, cual seria la forma de poder tabular correctamente el fichero Log.txt? yo lo hago de forma muy rudimentaria añadiendo espacios vacios pero no creo que sea lo suyo
me gustaria poder añadir en el fichero otro dato;seria el evento del objeto pero eso no lo he logrado
bueno, mucha informacion; espero que este claro lo que pretendo para ver si podeis ayudarme
se me ha ocurrido hacer un fichero Log.txt en el que poder recoger cualquier incidencia de la aplicacion pero no se el metodo correcto para hacer esto;
haciendo pruebas, he conseguido añadir el error en el fichero pero claro, solo desde el evento de un objeto; es decir, por ejemplo si pulso el boton de conectar a la bd y se generara un error, llamo a la funcion para añadir el error en el fichero y lo agrego;bien, pero esto quiero hacerlo desde todos los objetos que tenga en la aplicación?tengo que llamar desde cada uno de ellos a dicha función como se me ocurre a primera vista?claro, si esto es asi, cómo puedo llamar desde otro formulario a un procedimiento del FormPrincipal?
existe alguna posibilidad a nivel de la aplicacion de controlar si existiera alguna excepcion llamar a la función?
El fichero Log.txt, ya estaria creado y solo se tendria que añadir el error en el: fecha, hora, nombre del formulario,nombre del objeto,error
lo que he conseguido hasta ahora es esto:
procedure registrolog (FormName,NomObjeto,S:string) ;
var Fich : TextFile ;
begin
if FileExists (ExtractFilePath(Application.ExeName)+'\Log\Log.txt')
then
begin
AssignFile (Fich,ExtractFilePath(Application.ExeName)+'\Log\Log.txt') ;
Append (Fich) ;
Writeln (Fich,DateToStr(Date),' ',TimeToStr(Time),' ',' ',FormName,' ',NomObjeto,' ',S);
Flush (Fich) ;
CloseFile (Fich) ;
end ;
end;
llamada al procedimiento
TRY
tablepwd.Active := False ; //pongo false en lugar de true para generar queriendo la excepcion y ver el resultado de lo que seria agregar el error en el fichero
if meditclave.Text = tablepwd.fieldbyname('clave').asstring then
...
EXCEPT ON Error:Exception do
begin
tablepwd.close ;
Messagedlg ('Error al abrir la Base de Datos'+#13+#13+'Error del Sistema: '+Error.Message,mtError,[mbOK],0);
REGISTROLOG (Screen.ActiveForm.Name,(Sender as TSpeedButton).name,Error.Message) ;
end;
END;
linea añadida en el fichero:
16/09/2011 11:05:42 frmmenu sbconectar tablepwd: Field 'clave' not found
Ya si no es mucho pedir, cual seria la forma de poder tabular correctamente el fichero Log.txt? yo lo hago de forma muy rudimentaria añadiendo espacios vacios pero no creo que sea lo suyo
me gustaria poder añadir en el fichero otro dato;seria el evento del objeto pero eso no lo he logrado
bueno, mucha informacion; espero que este claro lo que pretendo para ver si podeis ayudarme