OnReconcileError
Olá pessoal !
Sempre trabalhei com Firebird e Delphi usando o evento OnReconcileError para traduzir erros do banco de dados. Tive problemas algum tempo atrás com vírus e fui obrigado a formatar meu PC. Instalei todas as ferramentas de trabalho e estava tudo bem até o momento de usar o OnReconcileError. Percebi q o mesmo n está funcionando. Já baixei video-aula e conferi todos os passos e mesmo assim o evento n é disparado de jeito nenhum. Alguém já passou por esse tipo de problema? Estou a praticamente 3 dias nessa situação de ignorancia. Alguém pode me ajudar ? Desde já, obrigaduuuu !
Sempre trabalhei com Firebird e Delphi usando o evento OnReconcileError para traduzir erros do banco de dados. Tive problemas algum tempo atrás com vírus e fui obrigado a formatar meu PC. Instalei todas as ferramentas de trabalho e estava tudo bem até o momento de usar o OnReconcileError. Percebi q o mesmo n está funcionando. Já baixei video-aula e conferi todos os passos e mesmo assim o evento n é disparado de jeito nenhum. Alguém já passou por esse tipo de problema? Estou a praticamente 3 dias nessa situação de ignorancia. Alguém pode me ajudar ? Desde já, obrigaduuuu !
Paulomaster10
Curtidas 0
Respostas
Marco Salles
20/07/2008
voce esta dando applyupdates ????
ou somente post ????
ou somente post ????
GOSTEI 0
Paulomaster10
20/07/2008
Estou usando post e a seguir applyudates;
Gostaria de acompanhar a rotina q me leva ao onReconcileError, mas nem isso está sendo possível.
Gostaria de acompanhar a rotina q me leva ao onReconcileError, mas nem isso está sendo possível.
GOSTEI 0
Marco Salles
20/07/2008
1)
e qual o parâmetro que voce esta usando no aplyupdates ????
2)
nun entendi ????
e qual o parâmetro que voce esta usando no aplyupdates ????
2)
Gostaria de acompanhar a rotina q me leva ao onReconcileError, mas nem isso está sendo possível.
nun entendi ????
GOSTEI 0
Paulomaster10
20/07/2008
ClientDataset1.ApplyUpdates(0);
Queria acompanhar na depuração o momento em q entro no form do ReconcileError, mas isso n está sendo possível pq sequer o evento dispara.
Queria acompanhar na depuração o momento em q entro no form do ReconcileError, mas isso n está sendo possível pq sequer o evento dispara.
GOSTEI 0
Marco Salles
20/07/2008
Ha muito tempo , isto tb ja aconteceu comigo ...
eu estou sem Delphi aqui para olha meus Bizus
mas acho o seguinte .....
Voce esta Dando o método ApplyUpdates dentro de Um Botão ou
Algum Evento AffterPost ou BeforePost do ClientDadaSet ???
Voce esta Usando Algum Try Excpet encapsulando o applyUpdates ???
Quando Voce provoca o Erro o que informa a Instrução abaixo
showmessage(inttostr(cds.ApplyUpdates(0));
Tente colocar um Erro (Raise) no Evento BeforePost ou AfterPost Do clientDataSet simulando um erro gerado pelo Provider e veja se o
Evento é disparado
como eu disse , ja pasei por isto , e no final deu certo
eu estou sem Delphi aqui para olha meus Bizus
mas acho o seguinte .....
Voce esta Dando o método ApplyUpdates dentro de Um Botão ou
Algum Evento AffterPost ou BeforePost do ClientDadaSet ???
Voce esta Usando Algum Try Excpet encapsulando o applyUpdates ???
Quando Voce provoca o Erro o que informa a Instrução abaixo
showmessage(inttostr(cds.ApplyUpdates(0));
Tente colocar um Erro (Raise) no Evento BeforePost ou AfterPost Do clientDataSet simulando um erro gerado pelo Provider e veja se o
Evento é disparado
como eu disse , ja pasei por isto , e no final deu certo
GOSTEI 0
Paulomaster10
20/07/2008
Oi Marco, obrigado pela ajuda.
Os eventos q me sugeriu usar, funcionam, mas no caso teria q personalizar os erros prá cada um dos campos e o trabalho seria enorme, por isso, tenho a necessidade de fazer funcionar o evento OnReconcileError. Com esse, economizo muito em código. Fiz um resumo prá q vc veja como está a rotina q já funcionou qdo antes de formatar meu PC.
procedure TForm1.btAplicarClick(Sender: TObject);
begin
clientdataset1.ApplyUpdates(0);
end;
procedure TForm1.ClientDataSet1ReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
var
Msg : string;
begin
Action := HandleReconcileError(dataset, UpdateKind, E);
if (Pos(´Key violation of PRIMARY or UNIQUE KEY´, e.Message) > 0) or
(Pos(´attempt to store duplicate value´, msg) > 0) then
begin
msg:= ´A tentativa de inserção/edição iria resultar em duplicidade ´ +
´de registros nesta tabela.´;
ShowMessage(msg + #13 + ´Descrição do Erro: ´ + 13 + Msg);
end;
end;
Obs. Uso o Win2000 e Delphi 7.
Os eventos q me sugeriu usar, funcionam, mas no caso teria q personalizar os erros prá cada um dos campos e o trabalho seria enorme, por isso, tenho a necessidade de fazer funcionar o evento OnReconcileError. Com esse, economizo muito em código. Fiz um resumo prá q vc veja como está a rotina q já funcionou qdo antes de formatar meu PC.
procedure TForm1.btAplicarClick(Sender: TObject);
begin
clientdataset1.ApplyUpdates(0);
end;
procedure TForm1.ClientDataSet1ReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
var
Msg : string;
begin
Action := HandleReconcileError(dataset, UpdateKind, E);
if (Pos(´Key violation of PRIMARY or UNIQUE KEY´, e.Message) > 0) or
(Pos(´attempt to store duplicate value´, msg) > 0) then
begin
msg:= ´A tentativa de inserção/edição iria resultar em duplicidade ´ +
´de registros nesta tabela.´;
ShowMessage(msg + #13 + ´Descrição do Erro: ´ + 13 + Msg);
end;
end;
Obs. Uso o Win2000 e Delphi 7.
GOSTEI 0
Marco Salles
20/07/2008
Os eventos q me sugeriu usar, funcionam, mas no caso teria q personalizar os erros prá cada um dos campos e o trabalho seria enorme, por isso, tenho a necessidade de fazer funcionar o evento OnReconcileError. Com esse, economizo muito em código. Fiz um resumo prá q vc veja como está a rotina q já funcionou qdo antes de formatar meu PC.
estamos partindo da premissa que esteja ocorrendo de fato um erro na atualização dos dados do clientDataSet ... Certo ???
então , na sua aplicação , ´force´ este ERRO E no evento UpdateError
do DataSet Provider Digite
procedure TForm1.DataSetProvider1UpdateError(Sender: TObject;
DataSet: TCustomClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
begin
Showmessage(´é erro mesmo´+#13+e.message) ;
end;
GOSTEI 0
Paulomaster10
20/07/2008
Infelizmente nada aconteceu. O evento UpdateError do Provider tb n disparou. Estou quase mudando do Wind2000 prá XP !!
GOSTEI 0
Marco Salles
20/07/2008
Infelizmente nada aconteceu. O evento UpdateError do Provider tb n disparou. Estou quase mudando do Wind2000 prá XP !!
infelismente não .... Pode ser que não esteja dando erro
Que tipo de erro voce espera ??? Campo Unique < chave primária > ???
O campo esta marcado como requerido nos componentes de acesso ???
GOSTEI 0
Vini_alpha
20/07/2008
Ola Marcos,
bem, vendo este topico eu observei que na string que vc tenta capturar o erro em violalção da chave primaria esta errada, entao a sentença nunca vai ser verdadeira, nao acusando a falha.
if (Pos(´Key violation of PRIMARY or UNIQUE KEY´, e.Message)
nessa linha eh so tirar a palavra ´Key´ pois ela nao aparece na mensagem de erro.
if (Pos(´violation of PRIMARY or UNIQUE KEY´, e.Message)
Pelo menos nas minhas mensagens é assim e deu certo apos tirar o key.
Vinicius Silva
bem, vendo este topico eu observei que na string que vc tenta capturar o erro em violalção da chave primaria esta errada, entao a sentença nunca vai ser verdadeira, nao acusando a falha.
if (Pos(´Key violation of PRIMARY or UNIQUE KEY´, e.Message)
nessa linha eh so tirar a palavra ´Key´ pois ela nao aparece na mensagem de erro.
if (Pos(´violation of PRIMARY or UNIQUE KEY´, e.Message)
Pelo menos nas minhas mensagens é assim e deu certo apos tirar o key.
Vinicius Silva
GOSTEI 0
Marco Salles
20/07/2008
realmente vini_alpha vc tem toda razão ; É que na maioria das vezes a gente faz as coisas de cabeça e tenta passar a idéia ...Muito ob por sua correção , pq na minha opinião tópico começado tinha que ser terminado ,
pq serve de referencia para outras dúvidas. As vezes um erro como o meu , de fácil solução , pode ser o motivo pelo desanimo do autor do post
pq serve de referencia para outras dúvidas. As vezes um erro como o meu , de fácil solução , pode ser o motivo pelo desanimo do autor do post
GOSTEI 0
X Me
20/07/2008
Muito bom post... Me ajudou muito..
GOSTEI 0