[firebase-br] como proceder com erro?

fabinho gatascheguei em yahoo.com.br
Sex Jul 20 22:00:48 -03 2007


Caro Anderson,

Obrigado pela rápida resposta. Tudo funcionou perfeitamente, mas não 
consegui exibir uma mensagem personalizada no delphi. Quando ocorre a 
exception, ele exibe uma mensagem enorme juntamente com a minha exception. 
Eu gostaria que o delphi lesse o código do erro e, se esse fosse de violação 
de UNIQUE, exibisse uma mensagem tal.. O caso é: e se o erro no banco for 
por outro motivo? Eu não quero uma mensagem de erro genérica pro banco, 
entende?


grato!!


----- Original Message ----- 
From: "Anderson - EasyBit" <anderson em easybit.com.br>
To: "FireBase" <lista em firebase.com.br>; "FireBase" <lista em firebase.com.br>
Sent: Friday, July 20, 2007 8:18 PM
Subject: Re: [firebase-br] como proceder com erro?


At 19:45 20/7/2007, fabinho wrote:
>Moçada, é assim:
>
>
>Tenho uma tabela com o campo USUAR_APELIDO,
>varchar e UNIQUE, ou seja, só admite registros
>diferentes. Acontece que, quando cadastro
>valores iguais nesse campo, obviamente o
>firebird critica com a mensagem de erro.
>
>Mas eu quero fazer minha própria mensagem (seria
>uma EXCEPTION?) Como chamo ela? Meu programa é no delphi.
>
>grato!!

Boa Noite,


Para fazer diretamente no FB, você pode criar uma EXCEPTION. Comando 
exemplo:

CREATE EXCEPTION EXCEPT_APELIDO_DUPLIC 'JA EXISTE
OUTRO USUARIO COM O MESMO APELIDO.';

E chamá-la num Trigger  do tipo BEFORE INSERT, mais ou menos como abaixo:

atenção, não chequei esta trigger, coloquei apenas como exemplo :)

CREATE TRIGGER TI_TABELA_USUARIOS
FOR TABELA_USUARIOS BEFORE INSERT AS
         DECLARE VARIABLE NUMROWS INTEGER;

BEGIN

SELECT COUNT(*)
FROM TABELA_USUARIOS
WHERE NEW.USUAR_APELIDO = TABELA_USUARIOS.USUAR_APELIDO
INTO :NUMROWS;
IF (NUMROWS > 0) THEN
         EXCEPTION EXCEPT_APELIDO_DUPLIC;

END


No Delphi, uma das formas de se fazer isso é:

try
...
...
comandos para incluir o registro
...
...
except
    on e:exception do
         begin
         coloque sua mensagem aqui

         end;
end;


O bloco except será executado para qualquer erro
(divisão por zero, por exemplo). Se vc quiser dar
tratamento diferente para  erros de bancos de
dados, deve ver se o erro ocorrido eh da classe
EDataBaseError. O Help do delphi tem vários
exemplos (e melhores que o que eu passei).


Abraço,

Anderson - EasyBit


______________________________________________
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


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.10.10/908 - Release Date: 19/7/2007 
18:10






Mais detalhes sobre a lista de discussão lista