Buscar

Tratamento de erros (formatando mensagens de erros das procedures)

Código

ESTA DICA É PARA TRATAMENTO DAS MENSAGENS DE EXCESSÕES DE FORMA
GLOBAL, DAS PROCEDURES CRIADAS NO ORACLE E TAMBÉM EM OUTROS BANCOS DE DADOS.

PRIMEIRAMENTE SERÁ NECESSÁRIO AO TÉRMINO DAS RAISE EXCEPTION DEFINIR UM
CARACTERE SINALIZADOR DE FIM DE MENSAGEM.
NO EXEMPLO ABAIXO FOI UTILIZADO O CARACTER '|'.

EXEMPLO:
RAISE_APPLICATION_ERROR(-20002,'CNPJ já cadastrado.|');

AGORA NO DELPHI SERÁ NECESSÁRIO DECLARAR A BIBLIOTECA DB EM USES
EXEMPLO:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, jpeg, ExtCtrls, ComCtrls, DB;

AGORA O PRÓXIMO PASSO É DECLARAR A PROCEDURE MOSTRAERROS
EXEMPLO:
Procedure MostraErros (Sender : Tobject ; E : Exception );


//IMPLEMENTAÇÃO DA PROCEDURE MOSTRAERROS
procedure TForm1.MostraErros(Sender: Tobject;
  E: Exception);
var
msg : string;
I, X: integer;
begin
//Verifica se o erro apresentado ocorre na base de dados
  If E is EdatabaseError then
  begin
      //For para varrer o tamanho da mensagem
      for I := 1 To Length(e.Message) Do
          begin
                  //if para verificar o fim da mensagem definido pelo caracter '|'
                  if (e.Message[I] = '|') then
                  //gravando posição do caracter indicativo
                  X := I;
          END;

       {SALVANDO MENSAGEM NA VARIAVEL MSG (32 É ONDE INICIA A MENSAGEM DA PROCEDURE SEM O CÓDIGO DE ERRO)
        ISSO NO ORACLE, AGORA EM OUTROS BANCOS SERÁ NECESSÁRIO FAZER A CONTAGEM E SUBSTITUIR OS VALORES DO 32}

       msg := copy(e.Message, 32, X-32);

       //APRESENTANDO A MENSAGEM AO USUARIO
       MessageBox(Application.Handle, PChar(Msg), 'Erro', MB_OK + MB_ICONERROR);
   end
   
   //APRESENTANDO ERRO SEM FORMATÇÃO SE NÃO FOR ERRO DA BASE DE DADOS
   ELSE
   MessageBox(Application.Handle, PChar(e.Message), 'Erro', MB_OK + MB_ICONERROR);


end;

AGORA O ÚLTIMO PASSO É FAZER A CHAMADA DA PROCEDURE MOSTRAERROS NO ONCREATE DO FORM
EXEMPLO:

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := MostraErros;
end;

DESSA FORMA OS ERROS DE BANCO DE DADOS DO SISTEMA FICAM CENTRALIZADOS.

CASO SE QUEIRA TRATAR ERROS DE NOT_NULL, CHAVES PRIMARIAS E ESTRANGEIRAS,
SERÁ NECESSÁRIO FAZER UMA BUSCA DENTRO DA MENSAGEM E TRATAR TAMBÉM.

MAS COM ESSA DICA JÁ DÁ PRA BOTAR A CABEÇA PRA FUNCIONAR E ADEQUAR SEMPRE MAIS
OS CÓDIGOS E IR COMPARTILHANDO

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 13/02/07
Por: Henrique Tomazela Lopes
Visualizada: 14538 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009