Try/Except trava em applyupdates(0) mas funciona!!??
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;
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
Curtidas 0
Respostas
Briciosm
17/02/2005
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!
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!
GOSTEI 0
Vinicius2k
17/02/2005
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 :
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:
T+
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+
GOSTEI 0
Ricna
17/02/2005
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
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
GOSTEI 0
Vinicius2k
17/02/2005
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 :
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 :
Blz?
T+
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+
GOSTEI 0