把ClientDataSet作为本地数据集,连接本地文本文件后增加大量数据后,都删除掉,再对其操作,其慢无法忍受,怎么办?(100分)

  • 主题发起人 主题发起人 maodw76
  • 开始时间 开始时间
M

maodw76

Unregistered / Unconfirmed
GUEST, unregistred user!
例如创建一个文本文件用ClientDataSet连接它

var
FileName:String;
begin
FileName:= ExtractFilePath(Application.ExeName)+'Scheme.cds';
ClientDataSet.FileName :=FileName;

ClientDataSet.FieldDefs.Add('SchemeName',ftString,100);
ClientDataSet.FieldDefs.Add('ID',ftInteger);
//ClientDataSet.FieldDefs.Add('ClName',ftString,20);

ClientDataSet.CreateDataSet;
end;
追加100000条记录
for i:=0 to 100000 do
begin
ClientDataSet.Append;
ClientDataSet.FieldByName('SchemeName').AsString:='Mao';
ClientDataSet.FieldByName('ID').AsInteger:=i;
end;

ClientDataSet.Post;
//ClientDataSet.applyupdates(-1);//执行不过去?
删除记录:
for i:=0 to ClientDataSet.RecordCount -1 do
begin
ClientDataSet.Delete;
ClientDataSet.Next;//
end;
ClientDataSet1.Post;//删除后文件大小不变,之后再对其操作慢到无法忍受,请高手指点!
 
你刪除記錄的時候只是從數據集裡面刪除了。
要ClientDataSet1.SaveToFile
 
追加100000条记录
for i:=0 to 100000 do
begin
ClientDataSet.Append;
ClientDataSet.FieldByName('SchemeName').AsString:='Mao';
ClientDataSet.FieldByName('ID').AsInteger:=i;
end;

ClientDataSet.Post;
ClientDataSet1.MergeChangeLog; --你这样试试
//ClientDataSet.applyupdates(-1);//执行不过去?---需要远程数据模块配合
删除记录:
for i:=0 to ClientDataSet.RecordCount -1 do
begin
ClientDataSet.Delete;
ClientDataSet.Next;//
end;
ClientDataSet1.Post;//删除后文件大小不变,之后再对其操作慢到无法忍受,请高手指点!

ClientDataSet1.MergeChangeLog; --你这样试试
 
ClientDataSet1.EmptyDataSet;
 
你干吗要这样做呢
直接createdataset,然后append,再savetofile就可以了。然后close就行,删除不是浪费时间吗?本来就很慢
何况也可以这样删除
while not isempty do
begin
delete;
end
 
后退
顶部