2016-06-10 12 views
1

ClientDataSet의 OnReconcileError 이벤트에서 raMerge으로 변경 사항을 전달하면 변경 사항을 델타에 저장하여 오류없이 다른 적용 업데이트를 준비 할 수 있습니다. OnReconcileError 이벤트에서 델타를 즉시 적용하도록 데이터 집합에 알리는 방법이 있습니까? 나는 오류가 AfterApplyUpdates 이벤트에서 조정되었는지를 확인하기 위해 몇 가지 복잡한 방법을 생각할 수 있습니다.ClientDataSet : 자동으로 조정 된 델타를 적용 하시겠습니까?

+0

OnReconcileError 이벤트에서 레코드를 수정하는 간단한 방법을 시도했지만 CDS에서 .Post를 호출하면 "작업 적용되지 않음"예외가 발생합니다. OnReconcileError에서 RecError 양식 (Object Repository의)을 이미 사용하고 있습니까? 어쨌든 CDS에 몇 가지 사용자 지정 제약 조건을 설정하여 가능한 한 멀리 오류가 발생하지 않도록 조정하는 것이 훨씬 간단합니다. – MartynA

+0

그래, 맞아. 병합 또는 새로 고침 만 허용하도록 변경했습니다. 새로 고침은 훌륭하지만 병합은 필요한만큼만 수행합니다. –

+0

글쎄, 나는 "나머지 절반"이 정확히 무엇인지 독자들에게 설명하는 것이 좋을 것이라고 생각한다. 내가 올바르게 당신을 이해한다면, 가장 어려운 점은 화해 오류를 극복하기 위해 수정 된 기록에 어떤 변화를 가할 것인지 정확히 OnReconcileError에서 (사람의 도움없이) 식별하는 것입니다. 네가 할 수 있다면. 나중에 ApplyUpdates를 호출하면 변경 사항을 실행하는 것이 상대적으로 간단하다고 생각했습니다. – MartynA

답변

1

업데이트를 적용하기위한 중앙 집중식 코드가 있었기 때문에 사용자가 병합을 요청했는지 확인하는 것이 가장 좋을 것입니다. 이 문제를 해결해야 할 수도 있지만 문제 해결을위한 해결책이 될 수 있습니다.

if(cds.ChangeCount > 0)then 
begin 
    fIsMerged := false; 
    errors := cds.ApplyUpdates(0); 
    if(errors = 0)then 
    begin 
    cds.Refresh; 
    end 
    //If there is a conflict, the user might try to merge. 
    //If they do, we need to reapply the update. 
    else if(fIsMerged)then 
    begin 
    errors := cds.ApplyUpdates(0); 
    if(errors = 0)then 
    begin 
     cds.Refresh; 
    end; 
    end; 
end; 

fIsMerged

내가 화해 핸들러에 설정된 클래스 변수입니다.