Trigger

Delphi

06/10/2004

Pessoal,

Estou com um problema, alguém pode me ajudar???

Tenho a tabela:

VIAGEM(COD, DT_INICIO, DT_FIM, HORARIO, ...)

e uma outra tabela chamada:

HISTORICO_VIAGEM(COD, DT_INICIO, DT_FIM, HORARIO, ...)

A tabela HISTORICO_VIAGEM deve guardar todas as movimentações (alterações e/ou exclusões) que forem feitas na tabela VIAGEM.
Ou seja quando o usuário tentar alterar o valor do campo DT_INICIO ou de qualquer outra o trigger deve ser disparado.
Tentei criar um trigger para ser disparado ao deletar ou alterar um dado na tabela viagem mas não está dando certo.
Como deve ser esse trigger? Ele deve copiar os campos da tabela viagem para o histórico? Como?
Como disparo ele na minha aplicação, pelo Delphi?


Barbara.michele

Barbara.michele

Curtidas 0

Respostas

Motta

Motta

06/10/2004

vc não falou o bd, as sintaxes e linguagem diferem.

vc deve criar uma trigger de after update delete

em oracle seria algo assim :

CREATE OR REPLACE TRIGGER trg_viagem
AFTER UPDATE OR DELETE
ON viagem
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
INSERT INTO VIAGEM_HISTORICO
COD, DT_INICIO, DT_FIM, HORARIO, ...)
VALUES
(:OLD.COD,:OLD.DT_INICIO,:OLD. DT_FIM, HORARIO, ...)
END;


MAS LEMBRO AS SINTAXES MUDAM MUITO

NO DELPHI VC NAO PRECISA FAZER NADA O BD DISPARA A TRIGGER


GOSTEI 0
Barbara.michele

Barbara.michele

06/10/2004

Obrigada. Só me explique mais uma coisinha:

1- Veja se entendi bem. Você colocou o trigger para disparar depois de deletar ou alterar. Mesmo depois da ação o banco guarda os valores da linha que foi excluída e grava na tabela histórico?

2- O que faz a linha: REFERENCING NEW AS NEW OLD AS OLD ?

3- Se quiser exibir os dados da tabela HISTORICO em um DBGrid como faço para mostrar quais as linhas que foram excluídas? Como destacar no grid que tal linha foi excluída?


GOSTEI 0
Motta

Motta

06/10/2004

Obrigada. Só me explique mais uma coisinha: 1- Veja se entendi bem. Você colocou o trigger para disparar depois de deletar ou alterar. Mesmo depois da ação o banco guarda os valores da linha que foi excluída e grava na tabela histórico? 2- O que faz a linha: REFERENCING NEW AS NEW OLD AS OLD ? 3- Se quiser exibir os dados da tabela HISTORICO em um DBGrid como faço para mostrar quais as linhas que foram excluídas? Como destacar no grid que tal linha foi excluída?


2) exato ! responde a 1

3) se ela não existir na outra tabela é pq foi excluída

select * from viagem_historico
where not exists (seelct null form viagem where ....)

vc tb pode ´flagar´ a tabela de historico com o movimento executado

if Updating then
INSERT INTO VIAGEM_HISTORICO
(mov,COD, DT_INICIO, DT_FIM, HORARIO, ...)
VALUES
(´u´,:OLD.COD,:OLD.DT_INICIO,:OLD. DT_FIM, HORARIO, ...)
END;
elsif deleting
INSERT INTO VIAGEM_HISTORICO
(mov,COD, DT_INICIO, DT_FIM, HORARIO, ...)
VALUES
(´d´,:OLD.COD,:OLD.DT_INICIO,:OLD. DT_FIM, HORARIO, ...)
END;
end if;


GOSTEI 0
POSTAR