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; |