Oracle - dicas para o client

Top  Previous  Next

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; 

----------------------------------------------------------------  

Delphi / Oracle 

===============

1) 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