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 >>>>>

<*> 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