2017-09-25 29 views
1

런타임에 Fielddefs가로드되고 값이 추가되는 Clientdataset이 있습니다. 색인 생성 및 공급자가 없으며 데이터 세트가 XML 파일에 바로 저장됩니다. 값 (단어 유형)을 변경하면 새 레코드가 만들어 지지만 이전 행 데이터는 유지되고 XML 파일에 저장되지만 레코드와 관련되지 않습니다. 또한, 중복 된 비활성 행은 연속 읽기 및 저장과 함게 mulltiply합니다. 이 코드편집 된 데이터이지만 액세스 할 수없는 오래된 데이터를 유지하는 데이터 집합을 피하는 방법은 무엇입니까?

`CFCDS.First; 
While not CFCDS.eof do 
begin 
     GetCFGComps(); 
     CFCDS.next; 
end;` 

Procedure GetCFGComps(); 
    var j: integer; 
    Begin 
     for j := 0 to 14 do 
     begin       {READ values to record} 
       case j of 
        0: FldPos.L := CFCDS.Fields[j].Value; 
        1: FldPos.T := CFCDS.Fields[j].Value; 
        ........... 
       end; 
     end; 
     with FldPos do begin 
      L := 550; 
      T := 69; 
      W := 333; 
     end; 
     for J := 0 to 14 do 
     begin 
      case j of 
       0: CFCDS.Fields[j].Value:=FldPos.L; 
       1: CFCDS.Fields[j].Value:=FldPos.T; 
         .................... 
      end; 
     end; 
     CFCDS.SaveToFile(CFGFileName, dfXML); 
     j:= CFCDS.RecordCount;   //always 50 - the correct number 
     CFCDS.First;      
     FldPos.L  := CFCDS.Fields[1].Value;   //returns new values 
     CFCDS.SaveToFile(DIRY+'CFTEXT.cft',dfBinary); //also has old supernumery rows 
    end; ` 

This is section of the xml file showing the last of the previous data set (Rowstate = "5" and the start of the new active data set below the red line Rowstate = "12" 내가 임시 데이터 세트를 생성하는 설정 작업 데이터를 삭제 한 후 변경되지 않는 값에 대한 기록 데이터를 사용하여 저장 등이 주변에 서투른 방법을 생각할 수에게 있습니다. CDS는 불만족 스럽지만 새로운 레코드를 생성 할 수 있다는 점을 고맙게 생각합니다. 그러나 이것은 매우 간단한 값 변경입니다.
코드를 제거한 경우with FldPos do begin L : = 550; T : = 69; W : = 333; 끝; XML 파일은 레코드 데이터 (모든 행 Rowstate "4") 만 있으면 깨끗합니다.

누구나 데이터 세트를 프로그래밍 방식으로 편집 할 수있는 방법이 있습니까? 오래된 액세스 할 수없는 데이터가 보존되지 않고 레코드의 행 데이터 만 포함되어 있습니까? 감사합니다

답변

1

발견 된 해결책 : CFCDS.LogChanges:= false;