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