Capturar erro do banco de dados

12/12/2003

2

Caros,
estou com um pequeno problema, eu criei um formulário de erros para que todo erro ocorrido ou exceção no sistema será chamado este formulário, só que todas as minhas stored procedures no sql server tem tratamento de mensagem, caso aconteça alguma coisa no cadastro, alteração ele irá chamar mensagens como esta que segue abaixo:

if @CtCx = @CtContraPart
begin
select @errno = 95004,
@errmsg = ´Os Caixas para abertura e Contrapartida da abertura devem ser diferentes !!!´
goto error
end

Até aí blz, ele retorna a mensagem do erro e lança na tela do cliente. Só que eu teria que capturar o código do Erro como mostra acima ´95004´, e no meu form de erro, ele tem tratamento EDATABASEERROR e EDBENGINERERROR, só que ele não entra em nenhuma dessas duas classes de exceção, ele entra no EXCEPTION, só que no EXCEPTION eu não tenho como pegar o código do erro da stored procedure. Alguém sabe como resolver este problema? Qual classes de Exceção eu utilizarei para buscar este código de erro? Eu utilizo o BDE para conectar no banco.


Obrigado


Atenciosamente,

Halex Maciel
Analista de Sistemas
Cuiabá-MT


Responder

Posts

12/12/2003

Tnaires

Olá Halex

Me desculpe perguntar isso, mas vc não deixou bem claro... Vc usou o método Message do Exception?
Ex
try
  // comandos
except
  on E: Exception do
  begin
    ShowMessage(E.Message);
  end;
end;

Sucesso.


Responder

12/12/2003

Halexmaciel

Bem, eu tenho várias stored procedures no banco, e todas elas mandam mensagem de erros pro sistema, tipo: ´O cliente quer fazer uma venda de um item que está zerado no estoque´ a stored procedure manda a mensagem avisando que o item não possui estoque. Nesta hora a eu passo dentro do banco um raiseerror @errono @errmsg e dou um rollback só que o que vai para o cliente é somente o @errmsg e eu gostaria de capturar o @errono que nada mais é que o código do erro, como mostro abaixo:

if @CtCx = @CtContraPart
begin
select @errno = 95004,
@errmsg = ´Os Caixas para abertura e Contrapartida da abertura devem ser diferentes !!!´
goto error
end

tenho que pegar o código ´95004´ entende?

Só que ele gera uma exceção que não é do tipo EDATABASEERROR OU EDBENGINERERROR. Ele só é capturado pela classe EXCEPTION, só que eu não pego o código quando cai neste tipo de exceção. Você pode ajudar? Obrigado


Responder

12/12/2003

Tnaires

Ah cara, entendi

A mensagem de erro pega beleza, mas o código do erro que dá bronca né?
Vejamos... A propriedade Message pega a mensagem certo? Tente usar a propriedade HelpContext pra pegar o código do erro.
Sucesso


Responder