如何避免数据集保留旧的已编辑但无法访问的数据

时间:2017-09-25 17:56:01

标签: xml runtime editing tclientdataset

我有一个Clientdataset,其Fielddef已加载并在运行时添加了值。没有索引,也没有提供程序,数据集直接保存到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;             结束; XML文件只有记录数据(所有行Rowstate" 4")。

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

1 个答案:

答案 0 :(得分:1)

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