Ver Mensaje Individual
  #4  
Antiguo 16-02-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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.
Cita:
Empezado por MAXIUM Ver Mensaje
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita