[firebase-br] LOG Criar/registar LOG

Mário Reis secretariadogeral em acra.pt
Qui Dez 21 13:05:21 -03 2006


Caro amigo,

Estive a ler atentamente o V.<proposta de solução e fui testa-la. Tudo sem 
sucesso. Veja a ssim:
    If (GRAV_ERR > 50) Then
     begin
      S_MSGTXT=S_IN||' - '||TRIM(S_MSGTXT);

 *** Aqui o sistema não levanta a excepção a menos que retire oWhen ANY***
      Exception Stop S_MSGTXT ;

      iCode=SQLCODE;
      WHEN ANY DO
      BEGIN
       /*INSERT INTO ERROR_LOG VALUES (SQLCODE); */
       Execute Procedure LOG_INSERT(S_IN,S_MSGTXT );

     / *** Se ponho a excepção aqui faz-me na mesma o RollBack
              E tudo quanto se possa escrever no LOG volta à estaca zero...
    ***/
       EXCEPTION;
     /***
      Se retiro volta a funcionar
    ***/
       END

A unica manbeira é fazer na aplicação mas ai ficamos com dois niveis de 
ensagens umas do Servidor e outras do lado do cliente
é + confusão . Bom(antes mal) até alguem descobrir vai ser a solução mas 
confesso que acho assim meio estupido e aumenta significativamente o tráfico 
na rede pelo menos em dobro pois a mensagem que me for devolvida pelo 
servidor vai ter de ser formatada e retonada para escrever no
ficheiro de LOG no servidor. Colocar um log em cada cliente é multiplicar os 
problemas
C/Melhores Cumprimentos
Mário Reis

"Jeferson Oliveira" 
<jefersonfoliveira em gmail.com> escreveu na 
mensagem news:aa2d50da0612181223g4f0104dt6c8f98095f8cc4d2 em mail.gmail.com...
Mário Reis escreveu:
> repare a documentação do FB1.5, Pag.48  tem o seguinte exemplo:
...
> Ora o que V. meestá dizendo é que a Exception a seguir ao Insert "desfaz" 
> o
> que fez o Insert
> Poderá ser mas parece absurdo.

Mário,

Muito boa sua citação. Fui ao release notes da versão 1.5 e lá está de
fato o exemplo que você citou.

Todas minhas respostas até agora tem base empírica; e estão também
embasadas na documentação do Interbase 6, minha fonte de estudos
inicial quando comecei a ter contato com o Ib/Fb.
No arquivo Langref.PDF, às páginas 166/167 é descrito o comportamento
de uma exception, cujo trecho tomo a liberdade de transcrever abaixo:

"Description
  An exception is a user-defined error that has a name and an
associated text message.
When raised, an exception:
- Terminates the procedure or trigger in which it was raised and
undoes any actions performed (directly or indirectly) by the procedure
or trigger.
- Returns an error message to the calling application. In isql, the
error message is displayed to the screen."

Observe que o texto acima justifica o que foi dito sobre o
cancelamento da transação.
Mas não entre em pânico ainda :-), pois há, logo na sequência, um
trecho que corrobora a eficiência do exemplo do release notes:

"Exceptions can be handled with the WHEN statement.
If an exception is handled, it will behave DIFFERENTLY."

Note então que esse caso é previsto na documentação. Uma exceção
capturada terá um comportamento diferente.
Mas há como capturar com a cláusula WHEN ANY uma exceção definida no
banco de dados? Se sim, seus problemas podem ser assim resolvidos.


Abraço!
Jeferson Oliveira

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.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