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; `
我能想到的解决这个笨拙的方式,如创建一个临时的数据集,删除工作数据集,然后使用没有改变值的记录数据保存。 我很欣赏CDS可以创建新记录,如果它发现一些不愉快的,但这是一个非常简单的值的变化。
如果我删除代码: 与FldPos做开始 L:= 550; T:= 69; W:= 333; 结束; 只有记录数据(所有行Rowstate“4”)XML文件都是干净的。
有没有人有建议如何以编程方式编辑数据集 如此旧的不可访问的数据不被保留,它只包含记录的行数据?谢谢