[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