你这种情况应该是虚拟字段的问题,可以将数据转为XML之后,就可以编辑了!function DataSetToXMLData(fData: TClientDataSet): String; var Str:string; i:Integer; rData:TClientDataSet; begin rData:=TClientDataSet.Create(nil); try Str:= fData.XMLData; Str:=StringReplace(Str,'fieldtype="i4"','fieldtype="fixed" WIDTH="18"',[rfReplaceAll]); Str:=StringReplace(Str,'SUBTYPE="Autoinc"',' ',[rfReplaceAll]); Str:=StringReplace(Str,'readonly="true"',' ',[rfReplaceAll]); Str:=StringReplace(Str,'DECIMALS="2" WIDTH="7"/>','DECIMALS="2" WIDTH="18"/>',[rfReplaceAll]); rData.XMLData:=Str; with rData do //把所有数据的空格去掉 begin First; while not eof do begin for i:=0 to FieldCount-1 do begin Edit; Fields[i].AsString:= Trim(Fields[i].AsString); Post; end; Next; end; end; rData.MergeChangeLog; Result := rData.XMLData; finally rData.Free; end; end;
var
Str:string;
i:Integer;
rData:TClientDataSet;
begin
rData:=TClientDataSet.Create(nil);
try
Str:= fData.XMLData;
Str:=StringReplace(Str,'fieldtype="i4"','fieldtype="fixed" WIDTH="18"',[rfReplaceAll]);
Str:=StringReplace(Str,'SUBTYPE="Autoinc"',' ',[rfReplaceAll]);
Str:=StringReplace(Str,'readonly="true"',' ',[rfReplaceAll]);
Str:=StringReplace(Str,'DECIMALS="2" WIDTH="7"/>','DECIMALS="2" WIDTH="18"/>',[rfReplaceAll]); rData.XMLData:=Str;
with rData do //把所有数据的空格去掉
begin
First;
while not eof do
begin
for i:=0 to FieldCount-1 do
begin
Edit;
Fields[i].AsString:= Trim(Fields[i].AsString);
Post;
end;
Next;
end;
end;
rData.MergeChangeLog;
Result := rData.XMLData;
finally
rData.Free;
end;
end;