[firebase-br] RES: Percorrer os campos de uma tabela em uma trigger
Antonio Carlos
a.lima.silva em terra.com.br
Sex Abr 24 16:43:40 -03 2009
Hum, posso ate estar "defasado" mas valor velho e novo é no update e é em
registro individual, por exemplo : vc altera 10 registros e ao terminar e
comitar o ultimo, não tem como pegar esses dados, já se vc coloca um trigger
nos eventos da tabela e faz ele disparar a CADA update ai vc conseguiria com
old.value new.value.
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Kelver Merlotti
Enviada em: sexta-feira, 24 de abril de 2009 16:26
Para: FireBase
Assunto: Re: [firebase-br] Percorrer os campos de uma tabela em uma trigger
Também tenho interesse nisso...
Que falta num faz um 'FieldByName' :-)
Abraços!
2009/4/24 Ivan Guimarães Meirelles <igmeirelles em gmail.com>:
> Olá caros colegas “Firebirdianos”...
>
>
>
> Eu preciso criar uma trigger que percorra todos os campos da tabela e faça
> uma comparação entre o valor novo (new) e o valor anterior (old) a fim de
> registrar em outra tabela as mudanças que ocorreram, quando o usuário
> executar um update na tabela.
>
>
>
> Eu criei uma SP onde passo o nome da tabela como parâmetro e a SP me
retorna
> todos os campos.
>
> O código da SP está abaixo e funcionando perfeitamente:
>
>
>
> -- ***************************************************************
>
> CREATE PROCEDURE LISTA_CAMPOS_TABELA (tabela varchar(93))
>
> returns (campo varchar(93))
>
> as begin
>
> for select
>
> c.rdb$field_name
>
> from rdb$relation_fields c
>
> where lower(c.rdb$relation_name) = lower(:tabela)
>
> order by 1
>
> into
>
> :campo
>
> do
>
> suspend;
>
> end
>
> -- ***************************************************************
>
>
>
> Então eu tentei fazer uma trigger da seguinte maneira:
>
>
>
> -- ***************************************************************
>
> CREATE TRIGGER TRIGGER_TESTE FOR TABELA_TESTE
>
> ACTIVE BEFORE UPDATE POSITION 0
>
> AS
>
> declare variable campo varchar(93);
>
> begin
>
> for select c.campo from lista_campos_tabela('tabela_teste') c
>
> into :campo
>
> do begin
>
> -- > aqui eu preciso pegar o valor anterior e o novo ...
> porém o nome do campo está em :campo
>
> -- > não sei como proceder.
>
> end
>
> end
>
>
>
>
>
> -- ***************************************************************
>
>
>
> Alguém poderia me dar uma idéia ?? estou utilizando Firebird 2.1
>
>
>
> Desde já agradeço a atenção dispensada.
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
--
Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Msn: kmerlotti em hotmail.com
Tem um segundo? Então, dá uma olhadinha nisso:
Um site de publicidades, de Portugal, está pagando em euros (quase 3x
mais que em reais) pra quem estiver disposto a:
* Ler anúncios
* Visitar sites
* Clicar em banners
* Navegar na NET
* Ler e-mails
* Convidar novos usuários
O pagamento é feito em cheque! Registra lá!! Não custa nada! ;-)
http://www.publipt.com/pages/index.php?refid=kmerlotti
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista