[firebase-br] Dúvida Trigger no Firebird

Gladiston Santana gladiston em vidy.com.br
Qua Fev 13 09:46:05 -03 2013


Eu creio que o programador que fez isso, o fez para que as exclusões -
geralmente fazem parte da manutenção em tabelas - que partissem da área de
desenvolvimento não fossem executados, ou seja, se apagar um registro na
tabela de movimentos, isso não irá afetar o calculo corrente de estoque. É
uma abordagem muito feia, pois assume que a trigger não disparará se
exclusões forem feitas do visual basic, contudo o nome interno do 'visual
basic' pode simplesmente mudar ou exclusões poderão ser feitas a partir de
qualquer outro programa então a tentativa de evitar 'caquinhas' dos
programadores por esse tipo de método é no mínimo vexatória nos dia de
hoje, e nem entendo direito porque 'visual basic' já que as manutenções
para o MSSQL geralmente são feitas por outro programa que acompanha o
produto.

Esse tipo de abordagem geralmente não seria feita no FB porque o FB permite
que se desligue momentaneamente as triggers com a qual fará manutenção nas
tabelas envolvidas, alguns até criam uma SP para desativar/ativar todas as
triggers. Se for para testar aplicativos, é muito mais pratico replicar o
database e fazer o teste longe da produção.

A declaração de uma trigger no FB não é muito diferente do MSSQL,
uma explicação melhor voce encontra neste link :
http://imasters.com.br/artigo/9086/banco-de-dados/triggers-no-firebird/

Agora, se você precisa dar continuidade a essa abordagem, então que troque
a variável de contexto 'nome da aplicação' pelo login da pessoa, assim:
Coloque no inicio da trigger :
IF (current_user NOT IN ('GLADISTON','SYSDBA','JONAS')) then
begin
   bla..bla...bla...
end

Nessa nova abordagem, a trigger não seria disparada pelos programadores
alistados. Eu não gosto de clausula NOT, assim jogaria logo no inicio da
trigger :
IF (current_user IN ('GLADISTON','SYSDBA','JONAS')) then
begin
   exit;
end
/* daqui em diante o resto da trigger */


Boa sorte com sua conversão, saiba que há no site firebirdsql.org um manual
de migração do MSSQL para Firebird, talvez você encontre coisas
interessantes nele.

Inte+


Gladiston Santana
Departamento de TI
Grupo Vidy
Tel (11) 4787-3122 ramal 228
Rod. Régis Bittencourt 3360 - Km 272,5
Taboão da Serra - SP - CEP: 06793-000
Visite nosso site: www.vidy.com.br
Visite também : www.expolabor.com.br




Em 8 de fevereiro de 2013 13:28, Júlio - Ampla Sistemas <
julio em amplasistemas.com.br> escreveu:

> Olá pessoal,
>
>
>
> Alguém sabe como passo a Trigger abaixo que está em SQL para Firebird?
>
> O mais importante é como verifico que certo aplicativo está acessando o
> banco de dados? Se este não estiver acessando tem que executar a trigger.
>
>
>
> CREATE TRIGGER NOME_DA_TRIGGER
>
>    ON  NOME_DA_TABELA
>
>    AFTER DELETE
>
> AS
>
> BEGIN
>
>     DECLARE @PROGRAMA VARCHAR(300)
>
>
>
>     SELECT @PROGRAMA = PROGRAM_NAME FROM SYS.SYSPROCESSES WHERE SPID =
> @@SPID
>
>
>
>     IF @PROGRAMA <> 'VISUAL BASIC'
>
>     BEGIN
>
>         -- AQUI SERÁ FEITO A INCLUSÃO DO REGISTRO QUE ESTÁ SENDO EXCLUÍDO
> NA
> TABELA AUXILIAR PARA
>
>         -- QUE SEJA INCLUÍDO COM O CARACTER "?" NA GERAÇÃO DO ARQUIVO
> ELETRÔNICO
>
>     END
>
> END
>
> GO
>
>
>
> Obrigado
>
>
>
> Júlio C. Mendonça
>
>
>
> ______________________________________________
> 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