2017-09-25 36 views
1

我有一个Clientdataset,其Fielddefs在运行时加载并添加了值。没有索引,也没有提供者,数据集直接保存到XML文件中。 如果我改变了值(只是单词类型),那么新的记录被创建,但旧的行数据被保留并保存在xml文件中,但与记录没有关联。此外,多余的非活动行可以连续读取并保存。 这是代码如何避免保留旧编辑但无法访问的数据的数据集

`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可以创建新记录,如果它发现一些不愉快的,但这是一个非常简单的值的变化。
如果我删除代码: 与FldPos做开始 L:= 550; T:= 69; W:= 333; 结束; 只有记录数据(所有行Rowstate“4”)XML文件都是干净的。

有没有人有建议如何以编程方式编辑数据集 如此旧的不可访问的数据不被保留,它只包含记录的行数据?谢谢

回答

1

找到的解决方案:CFCDS.LogChanges:= false;