ClientDataSet的目的本来就是为了实现瘦客户端,因而一次处理的记录数量不应太大,
这样反而能提高程序的运行效率...你可以一次读入所有的数据,但你可以分批将数据
存入的(这要充分利用ClientDataSet的功能),比如说:
//到此时,tempDataSet1已经获得了上万条数据,ClientDataSet已经与目的表连接
j:=tempDataSet1.RecordCount div 200;
inc(j);
//分j次存入
tempDataSet2.Data:=tempDataSet1.Data;
for i:=1 to jdo
begin
tempDataSet1.First;
if tempDataSet1.RecordCount>200 then
begin
tempDataSet1.RecNo:=201;
//定位于第200条之后并将后面的删除
for k:=201 to tempDataSet1.RecordCountdo
tempDataSet1.Delete;
end;
//好了,现在tempDataSet1中应该剩下不超过200个记录了
ClientDataSet.Data:=tempDataSet1.Data;
ClientDataSet.ApplyUpdates;
if i=j then
break;
//若已是最后一次,则没必要继续了...
//下面清除已经保存的那200个记录
tempDataSet1.Data:=tempDataSet2.Data;
for k:=1 to 200do
if not tempDataSet1.eof then
tempDataSet1.Delete else
break;
if tempDataSet1.RecordCount=0 then
break;
tempDataSet2.Data:=tempDataSet1.Data;
//修正tempDataSet2中的以备下次使用
end;
...
大概意思是这样了...但上述代码只适于你所有的记录都是新增的...你可试一下改变
200为其它值,比如每次300或更高,以得到最佳的更新量...
上面代码未经验证,只是提供了一个思路...