[firebase-br] Utilizando trigger para Auditoria nas tabelas ( campos )

Caio Oliveira news em caiosistemas.com.br
Qua Abr 5 13:10:38 -03 2006


Olá Pessoal,

Eu usei TRIGGERS em minha aplicação e não me arrependi; a solução que o 
Edvaldo apontou tem um problema na minha opinião: Se outra aplicação 
modificar o banco ou uma modificação (manutenção diretamente no banco) 
não será capturada pela aplicação dele.

Eu criei uma tabela chamada MONITOR_ARQUIVOS que armazena os dados 
considerados principais do registro; na verdade o nosso objetivo é o de 
monitorar quem e quando alterou ou excluiu determinado registro;

A Tabela "MONITOR ARQUIVOS" ficou assim:

CREATE TABLE MONITOR_ARQUIVOS
(
ID         INTEGER NOT NULL PRIMARY KEY ,
USERNAME    VARCHAR(35),
DATAHORA    TIMESTAMP,
ID_EMP      INTEGER,
DOCNUM      VARCHAR(12),
DOCDATA     DATE,
DOCTIPO     VARCHAR(20),
OPERACAO    CHAR(1),
NOMETABELA VARCHAR(30),
ID_TABELA INTEGER,
DESCRICAOITEM VARCHAR(75),
COMPLEMENTO VARCHAR(145);
);

CREATE GENERATOR GEN_MONITOR_ARQUIVOS;


Segue um exemplo da TRIGGER:

/*
EST_ALTERAITEM
*/
CREATE TRIGGER EST_ALTERAIDITEM FOR CEPES001
ACTIVE BEFORE UPDATE POSITION 2
AS
    BEGIN

     /* MONITOR DE ACESSO */
      INSERT INTO MONITOR_ARQUIVOS
      ( USERNAME, ID_EMP, DOCNUM, DOCDATA, DOCTIPO, OPERACAO,
      NOMETABELA, ID_TABELA, DESCRICAOITEM, COMPLEMENTO )
      VALUES
      ( CURRENT_USER, NEW.ID_EMP, null,
      null, 'ESTOQUE', 'A', 'CEPES001', NEW.ID_CEPES001,
      NEW.AUTOS||NEW.GRUPO||NEW.SGRUPO||NEW.ITEM||NEW.C_MARCA,
      '=>CUSTO:'||CAST( OLD.PUNITUC AS VARCHAR(14) )||'->'||CAST( 
NEW.PUNITUC AS VARCHAR(14))||'(SALDO)'||CAST(OLD.SALDO AS 
VARCHAR(14))||'->'||CAST(NEW.SALDO AS VARCHAR(14))
      );
    END
^

Assim sempre que o item é alterado o sistema armazena os dados do 
produto (algumas informações) na tabela do monitor: USUARIO, ID do item, 
codigo produto, tipo operacao; etc e mais alguns dados adicionais 
conforme a sua necessidade nos campos (descricaoitem e complemento).

O importante é que esse monitoramento vai aconteçer seja qualquer 
aplicação que vc. use para alterar o registro no seu banco: Sua 
aplicação, IBExpert ou outro programa de terceiros qualquer.

Vc. pode criar uma única TRIGGER para as três operações: INSERT, UPDATE 
e DELETE;

Espero ter ajudado.

abraço!

Luis Wagner dos Santos escreveu:
> 
> Pessoal
> 
> Nas minhas tabelas do sistema tenho vários campos de auditoria. Exemplo: usuário que inseriu, alterou, excluiu, inativou, máquina utilizada, data, hora e etc.
> Estes campos serão preenchidos de acordo com a utilização do sistema. Por exemplo: O usuário grava um registro, altera, inativa ou exlcui o sistema dispara um trigger para alimentar esses campos na mesma tabela usada na transação
> 
> Gostaria de saber se consigo fazer isso através do gatilhos "triggers".  ? Se conseguir alguém tem um pequeno exemplo para ajudar.
> 
> Mjuito obrigado
> _____________________________
> Luis Wagner dos Santos
> Mobile: 55-19-9131-7781
> e-mail: luis_wagner_santos em hotmail.com
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista