GARANTIR DESCONTO

Fórum Try/Except trava em applyupdates(0) mas funciona!!?? #268974

17/02/2005

0

Criei um banco em firebird, a tabela tem tres chaves primerias Data,CodCliente,Estagio ; quando vou salvar um registro tem o seguinte

try
....
tabela.post;
tabela.applyupdates(0);
except
showmessage(´erro´);
end;

blz, so que se eu tento salvar com as chaves iguais a um registro existente, ele identifica o key violation mas nao da a menssagem que eu criei simplesmente nao salve nao da erro e continua funcionando normal;

entao compilei com F7 e vi que o compilador trava na linha tabela.applyupdates(0); mostra o erro (do delphi) key violation e continua funcionado o programa mas o compilador nao sai da linha como se tivesse dado um F9

o programa funciona blz mas nao consigo fazer o except funcionar neste procedure

Obrigado;


Ricna

Ricna

Responder

Posts

17/02/2005

Briciosm

Dá uma olhada no pesquisar do forum.
Você vai achar o que precisa. Me lembro de ter visto ontem o mesmo problema que você está relatando.
Sei que o try ... except neste caso não vai funcionar.
Parece que você vai ter que usar if tabela1.applyupdates(0)<>0 then
erro.....
Acho que é isso!


Responder

Gostei + 0

17/02/2005

Vinicius2k

Colega,

O DataSet q vc chama de ´tabela´ é um TClientDataSet ?

Se sim, TClientDataSets NUNCA geram exceção no método ApplyUpdates. Try/Except não funciona neste caso.

A única forma de exibir a mensagem original de erro é utilizar o evento [b:c517ebf571]OnReconcileError[/b:c517ebf571] do TClientDataSet. Neste evento vc pode chamar, por exemplo :
ShowMessage(E.Message);


Vc pode verificar se houve algum erro, verificando o valor retorno do método ApplyUpdates. O método retorna o número de erros ocorridos durante a tentativa de aplicação. Ex:
if CDS.ApplyUpdates(0) > 0 then 
  ShowMessage(´Ocorreu um erro...´);


T+


Responder

Gostei + 0

17/02/2005

Ricna

valeu a dica;
entao meu sistema inteiro esta errado :oops:

Bom e com esse OnReconcileError tem como distinguir quando ele foi chamado , se na hora de salvar ou deletar , se o TClientDataSet tava em dsedit ou dsinsert?

valeu mesmo ai


Responder

Gostei + 0

18/02/2005

Vinicius2k

O OnReconcileError só ocorre quando existe algum erro no ApplyUpdates.
Para proteger erros no ambiente do lado do cliente (operações no ClientDataSet) vc pode utilizar Try/Except, como ao efetuar o Post, por exemplo. Try/Except só não resolve com o AppyUpdates..

No exemplo que vc passou :
try
  ...
  ClientDataSet1.Post;
  ClientDataSet1.ApplyUpdates(0);
except
  ShowMessage(´Erro !´);
end;


Neste caso, vc irá conseguir capturar a exceção no Post. A forma com que vc fez não está errada, só incompleta, pois para ter certeza que não houve erro vc precisa utilizar uma das formas que mencionei na minha primeira mensagem...

Algo +/- assim :
try
  ...
  ClientDataSet1.Post;
  if ClientDataSet1.ApplyUpdates(0) > 0 then
    ShowMessage(´Erro no AppyUpdates !´);
except
  ShowMessage(´Erro no Post !´);
end;


Blz?

T+


Responder

Gostei + 0

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

Aceitar