Try Except com on E: Exception do

Delphi

30/01/2014

Try

Except
on E: Exception do
ShowMessage(''Erro: '' + E.Message );

end;


Quando coloco no except o comando para pegar a mensagem de erro não consigo colocar mais nada abaixo desse comando, exemplo:
Try

Except
on E: Exception do
ShowMessage(''Erro: '' + E.Message );

Close;
end;

colocando um Close por exemplo dá erro e não compila. Mas posso colocar qualquer coisa e não compila, pois além de informar o erro gerado quero executar alguns procedimentos após a mensagem.

Como faço para resolver isto?
Leandro Carvalho

Leandro Carvalho

Curtidas 0

Respostas

Marco Salles

Marco Salles

30/01/2014

Begin end

Try

Except
on E: Exception do
  begin
    ShowMessage(''Erro: '' + E.Message );
   Close;
  end;
end;


[]sds
GOSTEI 0
Leandro Carvalho

Leandro Carvalho

30/01/2014

Obrigado Marcos.
Simples, é que todos os exemplos que eu vi não explicava dessa forma.
GOSTEI 0
Mário Reis

Mário Reis

30/01/2014


Depois de ter afirmado que não fazia, afinal lembrei-me. Há muito tempo mesmo que nãpo mexia nisto, porque em tempo fiera uma função genérica que cobria as minhas necessidades mais importantes(IBX)
Penitenciando-me, deixo aqui uma ideia de como como fazer no FireDAC (claro que pode ser melhorado, quem o fizer por favor partilhe.):

procedure TForm2.FdQryPrd1PostError(DataSet: TDataSet; E: EDatabaseError ;
var Action: TDataAction);
begin
// FireDAC EFDException = class(EDatabaseError)
// unit IBX.IB; EIBError = class(EDatabaseError)

if (E is EFDDBEngineException) then
begin
case EFDDBEngineException(E).Kind of
ekOther: ShowMesssage('Erro não definido!');
ekNoDataFound: ShowMessage( E.Message );
ekTooManyRows: ShowMessage( E.Message );
ekRecordLocked: ShowMessage( E.Message );
ekUKViolated: ShowMessage( E.Message );
ekFKViolated:ShowMessage( E.Message );
ekObjNotExists: ShowMessage( E.Message );
ekUserPwdInvalid:ShowMessage( E.Message );
ekUserPwdExpired:ShowMessage( E.Message );
ekUserPwdWillExpire:ShowMessage( E.Message );
ekCmdAborted: ShowMessage( E.Message );
ekServerGone:ShowMessage( E.Message );
ekServerOutput:ShowMessage( E.Message );
ekArrExecMalfunc:ShowMessage( E.Message );
ekInvalidParams: ShowMessage( E.Message );
end;
end
else // aqui o If (E is EDatabaseError) then ainda podeá ser mais apurado
ShowMessage('Erro ao escrever a Tabela:' +#13#13 + E.Message);

Action := daAbort;
end;
GOSTEI 0
POSTAR