Não sei se vai resolver o seu caso, mais eu faço assim

 

             if cds_padrao.ApplyUpdates(0) > 0 then

                cds_padrao.UndoLastChange(true);

 

[]s, 

Clériston Ramos

 

  _____  

De: Paulo [mailto:[EMAIL PROTECTED] 
Enviada em: domingo, 20 de novembro de 2005 17:59
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] ClientDataSet - Como trazer novamente um registro do
servidor, no OnReconcileError

 

Pessoal:

a) Estou usando Delphi 7 com DBExpress/ClientDataSet e InterBase 6

b) No evento OnReconcileError de um ClientDataSet, eu verifico qual foi a
mensagem
de erro:
   - Se foi violacao de chave, quero executar um raAbort
   - Se foi pelo fato de outro usuario na rede ter alterado o registro,
     quero reler o registro alterado do servidor de dados (para que o
usuario
     que recebeu o erro veja em sua tela o registro atual do BD)

c) Pelo que entendi do help do Delphi, para trazer novamente o registro do
servidor,
tenho que executar o comando Action := raRefresh

d) Porem, quando o programa faz um Action := raRefresh, ele entra em loop
(fica entrando sempre no OnReconcileError, e o usuario tem de pressionar
CTRL+ALT+DEL
para abortar o programa)

Poderiam analisar o codigo no final deste e-mail e me dizer o que esta'
errado ?
Obsservacoes:

1)  O ApplyUpdates(0) eu executo no evento AfterPost do ClientDataSet
2)  No OnReconcileError, ja' tentei fazer um .close e .open no
ClientDataSet,
mas entao aparece um outro erro, referente ao "provedor" (ate' esqueci qual
e')

Muito obrigado pela atencao de todos
Paulo

procedure
TFormCadMatServicos.ClientDataSetTBMATSERVICOSReconcileError(DataSet:
TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var
Action: TReconcileAction);
var
   sMensagem : String;

begin

    if Pos('PRIMARY OR UNIQUE KEY', AnsiUpperCase(E.Message)) > 0 then
        begin
           sMensagem := 'Registro já cadastrado.';
           Action := raAbort;
        end
     else
     if Pos('REGISTRO FOI ALTERADO POR OUTRO USUÁRIO',
AnsiUpperCase(E.Message)) > 0 then
        begin
           sMensagem := 'Este registro foi alterado por outro usuário.';
           Action := raRefresh;
        end
     else
        begin
           sMensagem := 'Algum erro inesperado ocorreu.';
           Action := raAbort;
        end;


     MessageDlg(sMensagem, mtError, [mbOK], 0);

end;

[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>








Yahoo! Grupos, um serviço oferecido por:



PUBLICIDADE
 
<http://br.rd.yahoo.com/SIG=12fkti5ao/M=365837.7000707.7924794.2369893/D=brc
lubs/S=2137111264:HM/Y=BR/EXP=1132523762/A=2950750/R=2/id=noscript/SIG=10tif
t5qr/*http:/br.movies.yahoo.com/> 

 
<http://br.i1.yimg.com/br.yimg.com/i/br/ads6/0829_lrec_cinema_calendario.gif
> 

 

  _____  

Links do Yahoo! Grupos

*       Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
  
*       Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> 
  
*       O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
Serviço do <http://br.yahoo.com/info/utos.html>  Yahoo!. 



__________ Informação do NOD32 1.1295 (20051120) __________

Esta mensagem foi verificada pelo NOD32 Sistema Antivírus
http://www.nod32.com.br



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a