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