Exceções no ApplyUpdates
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:
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?
É 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
Curtidas 0
Respostas
Emerson Nascimento
13/04/2008
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ê.
para visualizar esses erros, implemente o evento OnReconcileError do seu clientdataset. uma simples linha
ShowMessage(E.Message)
exibe a mensagem de erro pra você.
GOSTEI 0
Jonathan Bispo
13/04/2008
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?
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?
GOSTEI 0
Emerson Nascimento
13/04/2008
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;
GOSTEI 0
Jonathan Bispo
13/04/2008
Uma solução simples, para um problema aparentemente complexo.
Muito obrigado Emerson.
Muito obrigado Emerson.
GOSTEI 0