Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03/11/2011
JXJ JXJ is offline
Miembro
 
Join Date: Apr 2005
Posts: 2,475
Poder: 24
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
Reply With Quote
  #2  
Old 04/11/2011
newtron's Avatar
[newtron] newtron is offline
Membrillo Premium
 
Join Date: Apr 2007
Location: Motril, Granada
Posts: 4,214
Poder: 24
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.
Reply With Quote
  #3  
Old 04/11/2011
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,438
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.
Reply With Quote
  #4  
Old 05/11/2011
JXJ JXJ is offline
Miembro
 
Join Date: Apr 2005
Posts: 2,475
Poder: 24
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
Reply With Quote
  #5  
Old 05/11/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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 ....
Reply With Quote
  #6  
Old 06/11/2011
JXJ JXJ is offline
Miembro
 
Join Date: Apr 2005
Posts: 2,475
Poder: 24
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.
Reply With Quote
  #7  
Old 07/11/2011
newtron's Avatar
[newtron] newtron is offline
Membrillo Premium
 
Join Date: Apr 2007
Location: Motril, Granada
Posts: 4,214
Poder: 24
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.
Reply With Quote
  #8  
Old 07/11/2011
guillotmarc's Avatar
guillotmarc guillotmarc is offline
Miembro
 
Join Date: May 2003
Location: Huelva
Posts: 2,638
Poder: 26
guillotmarc Va por buen camino
Quote:
Originally Posted by JXJ View Post
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).
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Registrar aplicación para recibir mensaje de reloj Lord Delfos API de Windows 8 04/02/2008 03:54
Registrar nuestra aplicación en system (?) wofox API de Windows 5 08/12/2007 21:16
actividad en la aplicacion Ricardo Alfredo Varios 7 14/07/2007 16:07
Validar o sea logear un usuario con su contraseña en el proxy con el TidHttp fide Internet 0 14/06/2007 03:45
Registrar BD Firebird Tauro78 Firebird e Interbase 1 10/01/2007 17:36


All times are GMT +2. The time now is 20:11.


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