Tratar erro usando TClientDataSet!
Como faço para mostrar o erro que ocorreu na aplicação de uma forma personalizada e que o usuário possa entender e tomar as providencias cabiveis.
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
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
Curtidas 0
Respostas
Vinicius2k
27/08/2004
Colega,
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...
Sua rotina para exibição da mensagem e tratamento do erro deve estar no evento [b:3b581611e2]OnReconcileError[/b:3b581611e2] do ClientDataSet...
Espero ter ajudado...
T+
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+
GOSTEI 0
Silviomorelo
27/08/2004
Eu devo usar no final do código o comando abaixo caso tudo ocorra bem?
DTMNivel.CDSNivel.Refresh;
Outra duvida como faço para traduzir as mensagem de erros?
DTMNivel.CDSNivel.Refresh;
Outra duvida como faço para traduzir as mensagem de erros?
GOSTEI 0
Vinicius2k
27/08/2004
Normalmente sim, se vc tiver campos auto-incremento com gerenators + triggers, por exemplo...
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 :
T+
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+
GOSTEI 0
Silviomorelo
27/08/2004
Obrigado pela ajuda!
GOSTEI 0