我有一个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; `
我可以想到笨拙的方法,比如创建临时数据集,删除工作数据集,然后使用记录数据保存未更改的值。 我很欣赏CDS如果发现一些不愉快的话可以创建新的记录,但这是一个非常简单的价值变化 如果我删除代码: 与FldPos一起开始 L:= 550; T:= 69; W:= 333; 结束; XML文件只有记录数据(所有行Rowstate" 4")。
是否有人建议如何以编程方式编辑数据集 如此旧的无法访问的数据不会被保留,它只包含记录的行数据?感谢
答案 0 :(得分:1)
找到解决方案:CFCDS.LogChanges:= false;