Array
(
)

Dúvida no evento OnReconcileError

Rafs
   - 12 ago 2004

Caros colegas,

Estou com uma dúvida no evento OnReconcileError do ClientDataSet.
Depois de muito ´lutar´, consegui fazer funcionar o HandleReconcileError satisfatóriamente, porém, após optar por atualizar o servidor (opção raMerge) está sendo necessário executar, novamente, o comando ApplyUpdates do CDS.
No momento em que eu escolho a opção raMerge, o sistema não devería atualizar imediatamente o servidor? Digo, as informações, atualizadas, não deveríam estar disponíveis para outros clientes sem a necessidade de executar o comando ApplyUpdates novamente?

Grato.


G1b4
   - 14 ago 2004

Caro Rafs, a opção raMerge (TReconcileAction) deveria sim atualizar o banco de dados. Verifique se as chaves primárias estão como pfInKey e o provider UpdateMode está setado como upWhereKeyOnly, porque se os campos forem modificados por outra pessoa, essa atualização não ocorrerá.

Espero tê-lo ajudado :wink: !!!


Rafs
   - 16 ago 2004

Pois é g1b4,

No field do componente SQLDataSet, que se refere à chave primária no banco de dados eu coloquei a propriedade pfInKey para True, mas no DataSetProvider a opção UpdateMode está em upWhereAll, pois quando coloquei para upWhereKeyOnly o evento OnReconcileError não foi executado (estranho, não é?).
Já testei nas três opções de configuração do DataSetProvider, mas somente quando upWhereAll o evento foi executado, porém preciso executar duas vezes o ApplyUpdates, uma antes, no qual executa o evento OnReconcileError e outra depois (quando o usuário manda corrigir (raMerge)) para confirmar no BD.
Minha cofinguração é esta:
SQLConnection -> SQLDataSet -> DataSetProvider -> ClientDataSet.
No SQLDataSet adicionei os campos do BD através da opção AddFields (FieldEditor).
No Field que corresponde à minha chave primária do BD, mudei a propriedade pfInKey para True
No DataSetProvider a propriedade UpdateMode está como upWhereAll (devido ao problema citado anteriormente)

Não sei se faz diferença, mas utilizo Delphi7 Professional com Update atualizado (Build 8.1).

Obrigado pela atenção


G1b4
   - 16 ago 2004

Muito estranho mesmo, Rafs... Tente o seguinte, deixe o sqldataset como está e acrescente no clientedataset pelo fields editor todos os campos e configura também as flags conforme o seu sqldataset. Aí mude o modo de atualização do provider para upWhereKeyOnly e vê se funciona...


Rafs
   - 16 ago 2004

Fiz conforme vc disse, mas não houve resultado.
Inclusive refiz o FieldsEditor dos dois componentes (SQLDataSet e ClientDataSet), alterei a propriedade pfInKey para True do campo que é chave primária nos dois componentes mas o resultado é o mesmo, o evento OnReconcileError não é executado.
Também verifiquei se o evento OnUpdateError do DataSetProvider é executado em caso de erro, mas este também não o é.

Estou sem idéias do que fazer a partir de agora... rs :?


G1b4
   - 17 ago 2004

O OnUpdateError é disparado quando há erro na atualização de dados.
Rafs, vow fazer uns testes aki... aew te dou uma resposta, ok?


Rafs
   - 17 ago 2004

Fico muito grato...


Jpaulorio
   - 14 jan 2005

Tenho o mesmo problema do Rafs. Já tentei de tudo e nada? Vcs já descobriram qual o problema?


Rafs
   - 14 jan 2005

Infelizmente até o momento eu não consegui descobrir o problema.
Hoje estou verificando o que o usuário seleciona para saber se executo um novo ApplyUpdates ou um CancelUpdates.