[firebase-br] RES: RES: RES: RES: Erro em trigger
Carlos H. Cantu
listas em warmboot.com.br
Sábado Janeiro 30 14:49:08 -03 2021
Esse tipo de trigger é muito comum. Eu uso desde a época do InterBase,
passei por todas as versões do Firebird, e nunca tive problemas.
Se a base não está corrompida e o trigger está ativo, então é certeza
que a falha é na logica da sua aplicação ou de outros triggers da
base.
Já foi sugerido aqui algumas coisas que vão te ajudar a descobrir onde
a falha está, entre elas:
- Definir o campo como not null na base de dados, assim, quando alguma
rotina/trigger mudar ele pra null, vai quebrar e vc vai saber na mesma
hora
- Criar triggers de auditoria que guardam tudo que aconteceu com o
registro em tabelas de log (tem exemplo no site). Isso pode ajudar a
descobrir qual foi o IP que alterou, etc.
Jogar a culpa no Firebird ou parar de confiar em triggers não é
solução. Minhas regras de negócio são 95% implementadas em triggers.
Se não desse pra confiar neles, então eu estaria perdido.
[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
r> Bom dia Carlos,
r> Removi inclusive os fields do meu IBDetailFiscal e não tem em
r> nenhum outro lugar inserindo null no campo ORDEM e DATAHORA.
r> Não sei mais o que fazer, mas uma coisa é certa, não tenho como
r> confiar na execução de triggers no Firebird, vou ter
r> Que fazer manual em cada lançamento.
r> É a única solução que estou conseguindo chegar agora.
r> Grato pela ajuda
r> Enviado do Email para Windows 10
r> De: Carlos H. Cantu via lista
r> Enviado:sexta-feira, 29 de janeiro de 2021 15:43
r> Para: lista em firebase.com.br
r> Cc:Carlos H. Cantu
r> Assunto: Re: [firebase-br] RES: RES: RES: Erro em trigger
r> Verifique outros triggers ou outras rotinas, tanto no sistema como no
r> banco, que podem estar colocando null nesses campos depois de ter
r> passado por esse trigger.
r> PS: Se esses campos nunca podem ficar nulos, declare eles como not
r> null, isso inclusive ajudaria vc achar erros na logica que podem
r> exigir.
r> Qual a versao do Firebird?
r> []s
r> Carlos H. Cantu
r> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
r> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
r>> Boa tarde
r>> CREATE TRIGGER TR_ORDEM_DETAILFISCAL FOR DETAILFISCAL
r>> ACTIVE BEFORE INSERT POSITION 0
r>> AS
r>> BEGIN
r>> NEW.ORDEM = GEN_ID(GEN_ORDEM, 1);
r>> NEW.DATAHORA = CURRENT_TIMESTAMP;
r>> END
r>> ;
r>> A trigger esta dessa forma.
r>> Grato
r>> Enviado do Email para Windows 10
r>> De: Carlos H. Cantu via lista
r>> Enviado:sexta-feira, 29 de janeiro de 2021 14:48
r>> Para: FireBase
r>> Cc:Carlos H. Cantu
r>> Assunto: Re: [firebase-br] RES: RES: Erro em trigger
r>> Faça backup/restore e veja se restaura sem erros.
r>> O gfix não consegue detectar erros lógicos, por exemplo, um campo "not null" estar null.
r>> E verifique também se na base o trigger está ativo.
r>> []s
r>> Carlos H. Cantu
r>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
r>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
r>>> Bom dia Cantu, obrigado pela resposta
r>>> A principio, fiz o teste com gfx
r>>> gfix -validate -full C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -mend -full -ignore C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -validate -full C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -mend -full -ignore C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -validate -full C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -mend -full -ignore C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -validate -full C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> gfix -mend -full -ignore C:\Comercial\DMLoja\Recupera\DADOS1.fdb
r>>> em nenhum desses comandos retornou erro.
r>>> Aparentemente a base não esta corrompida.
r>>> Isso já me aconteceu em outros bancos com outros clientes em outras tabelas e campos.
r>>> Acredito que tenha um baita bug no firebird ai.
r>>> Enviado do Email para Windows 10
r>>> De: Carlos H. Cantu via lista
r>>> Enviado:sexta-feira, 29 de janeiro de 2021 12:08
r>>> Para: FireBase
r>>> Cc:Carlos H. Cantu
r>>> Assunto: Re: [firebase-br] RES: Erro em trigger
r>>> GEN_ORDEM é chave primaria? Se sim, não pode estar nula. Se vc
r>>> encontrou algum registro onde esse campo está nulo, sendo ele uma PK,
r>>> então seu banco deve estar corrompido.
r>>> Não vejo problema no código do trigger. Verifique o banco com o gfix e
r>>> faça também um backup/restore para valida-lo.
r>>> []s
r>>> Carlos H. Cantu
r>>> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
r>>> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
rvl>>>> So pra completar a NEW.ORDEM = GEN_ID(GEN_ORDEM, 1);
rvl>>>> Também tem vários que estão como null.
rvl>>>> Grato
rvl>>>> Enviado do Email para Windows 10
rvl>>>> De: rodrigo via lista
rvl>>>> Enviado:sexta-feira, 29 de janeiro de 2021 10:58
rvl>>>> Para: FireBase
rvl>>>> Cc:rodrigo
rvl>>>> Assunto: [firebase-br] Erro em trigger
rvl>>>> Bom dia,
rvl>>>> Nessa trigger, quando o registro é gravado ele teria que colocar automaticamente
rvl>>>> A data e a hora.
rvl>>>> Mas em muitos registros está como null
rvl>>>> CREATE TRIGGER TR_ORDEM_DETAILFISCAL FOR DETAILFISCAL
rvl>>>> ACTIVE BEFORE INSERT POSITION 0
rvl>>>> AS
rvl>>>> BEGIN
rvl>>>> NEW.ORDEM = GEN_ID(GEN_ORDEM, 1);
rvl>>>> if (NEW.DATAHORA IS NULL) THEN
rvl>>>> NEW.DATAHORA = CURRENT_TIMESTAMP;
rvl>>>> END
rvl>>>> ;
rvl>>>> O que será que esta errado?
rvl>>>> Grato
r>>> ______________________________________________
r>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
r>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
r>>> http://www.firebase.com.br/fb/artigo.php?id=1107
r>>> Para consultar mensagens antigas:
r>>> http://www.firebase.com.br/pesquisa_lista.html
r>> ______________________________________________
r>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
r>> Para saber como gerenciar/excluir seu cadastro na lista, use:
r>> http://www.firebase.com.br/fb/artigo.php?id=1107
r>> Para consultar mensagens antigas:
r>> http://www.firebase.com.br/pesquisa_lista.html
r> ______________________________________________
r> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
r> Para saber como gerenciar/excluir seu cadastro na lista, use:
r> http://www.firebase.com.br/fb/artigo.php?id=1107
r> Para consultar mensagens antigas:
r> http://www.firebase.com.br/pesquisa_lista.html
Mais detalhes sobre a lista de discussão lista