GARANTIR DESCONTO

Fórum Exceções no ApplyUpdates #357073

13/04/2008

0

Oi, estou precisando da ajuda de vocês.

É o seguinte...

Tenho uma aplicação onde utilizo um componente MDOQuery, um Provider liga à Query e um ClientDataSet ligago ao Provider.

Suponhamos que eu tenha o seguinte código:
procedure Button1Click(Sender: TObject);
begin
try
ClientDataSet1.ApplyUpdates(0);
except
ShowMessage(´Erro ao tentar gravar dados´);
end;

end;


Nesse caso o propósito é simples...
Tentar aplicar atualizações feitas no DataSet, e, caso haja algum erro, exibir a mensagem ´Erro ao tentar gravar dados´.

O problema é que, quando utilizo o ClientDataSet, mesmo que haja um erro, a execução do programa não é direcionada para o bloco Except.

Alguém sabe o motivo desse erro?


Jonathan Bispo

Jonathan Bispo

Responder

Posts

13/04/2008

Emerson Nascimento

essa é uma característica do clientdataset.

para visualizar esses erros, implemente o evento OnReconcileError do seu clientdataset. uma simples linha
ShowMessage(E.Message)
exibe a mensagem de erro pra você.


Responder

Gostei + 0

13/04/2008

Jonathan Bispo

Obrigado pela ajuda Emerson.

Realmente, coloquei o código no evento OnReconcileError do ClientDataSet e funcinou perfeitamente.

Mas encontrei um outro problema.

Por exemplo, se houver algum outro código após o ApplyUpdates(0) e mesmo que ocorra um erro nesse método, o código continua sendo executado.

Não é igual ao bloco Try...Except que muda a excução do programa.

Como faço para que isso aconteça usando o Evento OnReconcileError?


Responder

Gostei + 0

13/04/2008

Emerson Nascimento

procedure TForm1.Button1Click(Sender: TObject);
var
  nErros: integer; // variável com o total de erros obtidos
begin
  nErros := ClientDataSet1.ApplyUpdates(0);

  // se ocorreu algum erro, sai da rotina
  if nErros > 0 then exit;

  // se NÃO ocorreu erro algum, prossegue
  {demais rotinas a serem executadas}
end;

procedure TForm1.ClientDataSet1ReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  ShowMessage(E.Message);
end;



Responder

Gostei + 0

14/04/2008

Jonathan Bispo

Uma solução simples, para um problema aparentemente complexo.

Muito obrigado Emerson.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar