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(, 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;
 
 
Nenhum comentário:
Postar um comentário