Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Question ¿logear registrar Actividad en aplicacion con firebird?

hola

tengo una duda.
quiero poder logear todo lo que se quiera hacer en la base de datos.
ejemplo

mi aplicacion pide un usuario para entrar en la aplicacion
y quiero llevar un registo de que se hizo y quien y la fecha y hora.

osea se logeo el usuario
cuando se seleccione un producto y se venda quien vendio. a quien vendio.
a que hora se hizo la factura. que factura se hizo.
cuando se pago a los proveedores o cuadno se hizo el pedido.

hasta ahora he pensado en hacer una tabla llamada logs
para meter ahi la

no se si mi idea esta bine planteada lo de tener una tabla con todos los historicos de las acciones
importantes realizas y por quien y a que hora. o si.

no es buena idea.

asi como el mecanismo de usar una tabla en la base de datos.

¿acso hay otras formas de llevar un registro de eventos o se sucesos?
¡firebrid ya tiene algo inegrado de forma semejante que lleve un log de que se hizo. se agrego un registro. se borro.
se actualizo?


gracias por su ayuda
Responder Con Cita
  #2  
Antiguo 04-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Hola.

A no ser que alguien más avezado me corrija creo que la mejor solución es usar los triggers de la base de datos para que en cada inserción/modificación/anulación de registros agregue en alguna tabla la información que necesites y a esto añadir manualmente lo relacionado con el logon de usuarios que al no afectar a ninguna tabla no disparará ningún trigger.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 04-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo creo que no vas mal encaminado.
Te recomiendo también que busques en los foros, porque es un tema que hemos discutido otras veces.

En mi caso utilizo una tabla de "traza" (yo la llamo así).
La idea es insertando información que las cosas que desees "guardar" en esta tabla. En mi caso información del usuario, junto con fecha y hora de la modificación, tablas que se modifica, ID del objeto modificado (estas dos para poder acceder al objeto), tipo de operación (INSERT, DELETE, UPDATE), y un par de campos que guardan el estado anterior y en nuevo del registro.

Lo más eficiente es rellenar esa información desde TRIGGERS como te han dicho, aunque tendrás que programar más, si lo haces desde programa es menos eficiente, pero debes programar menos.
__________________
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.
Responder Con Cita
  #4  
Antiguo 05-11-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
¿eso de triggers nunca lo he hecho para agregar campos. ?

no tienen un codigo de como seria

¿como genero el trigger y como le asigno que haga la insersion de la accion y que datos insgrese segun el usuario?
yo supongo que seria un usuario de la base de datos. diferente a sysdba
o seria posible tambien usar un usuario que yo de de alta en una tabla de usuarios

estoy confundido en esto.

gracis
Responder Con Cita
  #5  
Antiguo 05-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JXJ.

Te pongo un ejemplo muy simple, como para darte una idea, de triggers que guardan en la tabla USERLOG, las acciónes de borrado y modificación echas a la tabla TABLA:
Código SQL [-]
SET TERM;^

CREATE TRIGGER TABLA_AD FOR TABLA
ACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  INSERT INTO USERLOG (USUARIO, ACCION, FECHAHORA)
  VALUES((SELECT CURRENT_USER FROM RDB$DATABASE), 'BORRADO', (SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE));
END^

CREATE TRIGGER TABLA_AU FOR TABLA
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
  INSERT INTO USERLOG (USUARIO, ACCION, FECHAHORA)
  VALUES((SELECT CURRENT_USER FROM RDB$DATABASE), 'MODIFICACION', (SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE));
END^

...

SET TERM;^

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 06-11-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
ya veo.
este escript es usando un usuario que esta dado de alta enl a base de datos de firebird.

yo acostumbro crear usuarios que solo estan registrados en una tabla.

y los mando a llamar.

se podria pasar el usuario de mi tabla en lugar de CURRENT_USER FROM RDB$DATABASE
????

revisando por que como tengo que hacer una aplicacion que tenga varias bases de datos
distribuidas en sucursales. y quieren que sean
replicadas la informacion de una en las otras y de las otras a la una.

no se me hace practivo tener dar de alta usuarios a labase de datos. y
hacer las acutlaizacioens a nivel interno. no se. a lo mejor estoy mal.
Responder Con Cita
  #7  
Antiguo 07-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Yo lo que hago es almacenar el usuario en una variable, cuando se hace el log del usuario la capturo y la mantengo durante toda la aplicación y así lo tienes disponible para estas u otras cosas.
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 07-11-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por JXJ Ver Mensaje
ya veo.
este escript es usando un usuario que esta dado de alta enl a base de datos de firebird.

yo acostumbro crear usuarios que solo estan registrados en una tabla.

y los mando a llamar.

se podria pasar el usuario de mi tabla en lugar de CURRENT_USER FROM RDB$DATABASE
????

revisando por que como tengo que hacer una aplicacion que tenga varias bases de datos
distribuidas en sucursales. y quieren que sean
replicadas la informacion de una en las otras y de las otras a la una.

no se me hace practivo tener dar de alta usuarios a labase de datos. y
hacer las acutlaizacioens a nivel interno. no se. a lo mejor estoy mal.
Para identificar al usuario que lanza una consulta, puedes jugar con la función rdb$get_context('SYSTEM', 'CLIENT_ADDRESS')

Esta función te devuelve la dirección IP del usuario.

Ahora ya lo único que necesitas es poder identificar a cada usuario a partir de su dirección IP.

Para ello te recomiendo que añadas una nueva tabla de registro, que registre todas las conexiones de usuarios, anotando el usuario que se conecta, la hora y la dirección IP. Puedes utilizar los eventos de base de datos para rellenar automáticamente ese registro.

Ahora cuando quieras consultar cual es el usuario que ha lanzado una consulta, solo tienes que mirar la IP por la que se ha lanzado la consulta (mediante la función que hemos indicado al principio) y consultar el registro de conexiones de usuarios, para ver cual es el último usuario que ha entrado en el sistema por esa dirección IP.

NOTA: El problema lo tendremos si en un mismo equipo (en una misma dirección IP) se abren varias sesiones del programa, con usuarios distintos. Puesto que todas las consultas lanzadas desde ese equipo se asignarían al último de los usuarios que se haya validado desde allí. En ese caso, utiliza : rdb$get_context('SYSTEM', 'SESSION_ID')

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 23-11-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Y donde guardas la informacion del usuario o los usuarios que estan logeados?. Me refiero a los que tienen en tu tabla.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #10  
Antiguo 23-11-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Revisa este hilo...

http://clubdelphi.com/foros/showthre...gger+auditoria

Es interesante, desde el principio hasta el final. Yo me quedé con la última opción, de la que dispones el código.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Registrar aplicación para recibir mensaje de reloj Lord Delfos API de Windows 8 04-02-2008 03:54:14
Registrar nuestra aplicación en system (?) wofox API de Windows 5 08-12-2007 21:16:12
actividad en la aplicacion Ricardo Alfredo Varios 7 14-07-2007 16:07:53
Validar o sea logear un usuario con su contraseña en el proxy con el TidHttp fide Internet 0 14-06-2007 03:45:16
Registrar BD Firebird Tauro78 Firebird e Interbase 1 10-01-2007 17:36:57


La franja horaria es GMT +2. Ahora son las 10:58:38.


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