Tratar erro usando TClientDataSet!
27/08/2004
0
Quando o usuário dispara o evento para tentar gravar, executo os seguintes códigos:
procedure TfrmNivel.btnGravarClick(Sender: TObject);
begin
try
with DTMNivel.CDSNivel do begin
Post;
if ApplyUpdates(0) <> 0 then CancelUpdates;
end;
except
on E: Exception do begin
ShowMessage(E.Message);
end;
end;
end;
Isso está certo?
Alguem tem algum exemplo para tratar os erros mais comuns?
Estou usando o banco de dados Interbase 6.0, dbexpress, clientdataset, delphi 7
Obrigado
Silviomorelo
Posts
27/08/2004
Vinicius2k
Está quase certo... menos com relação ao Try/Except, que não faz sentido com ClientDataSets pq nunca geram exceção em caso de erros no ApplyUpdates...
procedure TfrmNivel.btnGravarClick(Sender: TObject); begin with DTMNivel.CDSNivel do begin Post; if ApplyUpdates(0) > 0 then CancelUpdates; end; end;
Sua rotina para exibição da mensagem e tratamento do erro deve estar no evento [b:3b581611e2]OnReconcileError[/b:3b581611e2] do ClientDataSet...
ShowMessage(E.Message);
Espero ter ajudado...
T+
27/08/2004
Silviomorelo
DTMNivel.CDSNivel.Refresh;
Outra duvida como faço para traduzir as mensagem de erros?
27/08/2004
Vinicius2k
Mas vc não deve generalizar, pq depedendo do tamanho da tabela, isto pode ser ruim (lento)... vc deve analizar cada caso separadamente...
Para traduzir as mensagens vc pode usar a função POS e dar uma mensagem personaliza, ou (muito mais difícil) traduzir o arquivo ´firebird.msg´ -- a ferramenta IBExpert ( www.ibexpert.com ) tem recursos para a tradução do firebird.msg
Um exemplo de uso da função POS :
... var Msg: String; begin if (Pos(´violation of PRIMARY or UNIQUE KEY´, E.Message) > 0) or (Pos(´attempt to store duplicate value´, E.Message) > 0) then begin Msg:= ´A tentativa de inserção/edição iria resultar em duplicidade ´ + ´de registros nesta tabela.´; end; ShowMessage(Msg); end;
T+
Clique aqui para fazer login e interagir na Comunidade :)