7- Sugestão para tratamento de erros no Delphi / Cliente-Servidor

      Todas as vezes que são abertas as tabelas é colocado o comando StartTransaction antes da abertura das mesmas.

Quando acontece algum erro na abertura das tabelas, o Delphi dispara uma mensagem de erro. Este erro pode ter sido provocado por diversos motivos mas é certo que o erro foi de alteração de uma ou mais tabelas no Banco de Dados. é aconselhável que se coloque uma rotina de tratamento de erro listada abaixo: 

 - Onde estão as tabelas, coloque as suas tabelas que serão abertas; 

 - Onde será mostrada a mensagem coloque uma mensagem qualquer avisando sobre o erro 

  try

    if F_Menu.DBSistema.IsSQLBased then 

       F_Menu.DBSistema.StartTransaction;

    Tabela1.Open;

    Tabela2.Open;

    Tabela3.Open;

    Tabela4.Open;

  except

    on EDatabaseError do

      if MessageDlg(<mensagem>, mtError, [mbOK], 0) <> mrOK Then

        raise;

      end;

  ShowModal;  

Sugestão  Delphi / Oracle  

      Criar uma função que irá verificar qual o código de erro enviado pela exceção e então emitir uma mensagem em português. Abaixo está uma idéia desta rotina que será inserida no formulário principal da sua aplicação.  

procedure TF_Menu.ErrorMsg(Sender : TObject; E: exception);

begin

  if e is EDBengineError then

       TrataErro(E as edbEngineError)

  else

     application.showException(E);

end;  

procedure TF_Menu.TrataErro(E: eDBEngineError);

var

  nSQLError   : integer;

  cSQLMessage : string;

  cTable      : string;

  x           : integer;

begin

     nSQLError := 0;

     cSQLMessage := '';

     for x:=0 to e.ErrorCount -1 do

        if e.errors[x].NativeError <> 0 then

        begin

           nSQLError   := e.errors[x].NativeError;

           cSQLMessage := e.errors[x].message;

        end;

        if nSQLError <> 0 then

        begin

           cTable := '';

           x      := pos('table"',cSQLMessage);

           if x > 0 then

           begin

              cTable := copy(cSQLMessage,x+7,20);

              x      := pos('"',cTable);

              if x > 0 then cTable := copy(cTable,1,x-1);

           end;

        case nSQLError of

                1  : showmessage('Este registro já está cadastrado.');

           2292 : showmessage('Este resgistro não pode ser excluído porque'+#10+

                      'existem outros que dependem dele e que não foram excluídos');

         12203 : showmessage('Base de Dados está fora do ar. Favor entrar'+#10+

                      'em contato com o responsável pela rede na '+#10+

                      'localidade selecionada ou tente mais tarde.');

        else

           showmessage(IntToStr(nSQLError)+' '+cSQLMessage);

        end;

     end

  else

     showmessage('Algo errado aconteceu!');

end;

 

procedure TF_Menu.FormCreate(Sender: TObject);

begin

   Application.OnException := ErrorMsg;

end; 

 


 Copyright© 2001-2003 – Active Delphi – Todos os direitos reservados

Webmasters: webmaster@activedelphi.com.br 250364654
info@activedelphi.com.br 130424537