Hola.
Cita:
Empezado por MAXIUM
Gracias Neftali.
Básicamente registrar fecha-hora, registro que fue eliminado, editado o agregado y el usuario que lo realizó.
|
Podes crear un archivo donde guardar toda la actividad que realiza un usuario sobre determinada tabla y al efecto crear un trigger que realize la tarea, por ejemplo:
Código SQL
[-]
SET TERM ^ ;
CREATE OR ALTER TRIGGER PERSONA_BI FOR PERSONA
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
DECLARE VARIABLE V_ACTION VARCHAR(12);
DECLARE VARIABLE V_ID INTEGER;
DECLARE VARIABLE V_NOMBRE VARCHAR(40);
DECLARE VARIABLE V_DIRECC VARCHAR(40);
DECLARE VARIABLE V_LOCALID INTEGER;
DECLARE VARIABLE V_TELEF VARCHAR(15);
BEGIN
IF (INSERTING) THEN
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(G_PERSONA, 1);
V_ID = NEW.ID;
V_NOMBRE = NEW.NOMBRE;
V_DIRECC = NEW.DOMICILIO;
V_LOCALID = NEW.LOCALID;
V_TELEF = NEW.TELEFONO;
V_ACTION = 'INSERCION';
END
ELSE IF (UPDATING) THEN
BEGIN
V_ID = OLD.ID;
V_NOMBRE = NEW.NOMBRE;
V_DIRECC = NEW.DOMICILIO;
V_LOCALID = NEW.LOCALIDAD_ID;
V_TELEF = NEW.TELEFONO;
V_ACTION = 'MODIFICACION';
END
ELSE
BEGIN
V_ID = OLD.ID;
V_NOMBRE = OLD.NOMBRE;
V_DIRECC = OLD.DOMICILIO;
V_LOCALID = OLD.LOCALIDAD_ID;
V_TELEF = OLD.TELEFONO;
V_ACTION = 'BORRADO';
END
INSERT INTO PERSONA_HISTO (ID, PERSONAID, NOMBRE, DOMICILIO, LOCALIDADID,
TELEFONO, USER_NAME, DATETIME, REMOTE_ADDR, SESSION_ID, TYPE_ACTION)
VALUES (GEN_ID(G_PERSONA_HISTO, 1), :V_ID, :V_NOMBRE, :V_DIRECC, :V_LOCALID, :V_TELEF,
(SELECT CURRENT_USER FROM RDB$DATABASE),
(SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE),
(SELECT RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS') FROM RDB$DATABASE),
(SELECT RDB$GET_CONTEXT('SYSTEM', 'SESSION_ID') FROM RDB$DATABASE),
:V_ACTION);
END^
SET TERM ; ^
Donde
PERSONA es la tabla a controlar y
G_PERSONA su secuenciador. Mientras que
PERSONA_HISTO sería la tabla de historial y
G_PERSONA_HISTO su secuenciador.
Saludos