Y
yuanshan
Unregistered / Unconfirmed
GUEST, unregistred user!
各位,在下现在遇到一个难题,TClientDataSet的存储性能太低
目的是:从源读取数据向目标表更新数据。现采用TClientDataSet来实现
有以下情况
1、读取源表的一条记录
2、从目标库中查找到与源表当前记录的主键相同的记录,并取到TClientDataSet缓存中
3、将源表中查找到的记录替换目标表对应的记录
4、保存目标表
其中源表和目标表结构完全一样
1-3步速度很快,但第4步速度较慢,因为需要向目标库中提交数据。
如果采用以上方法,则每在目标表中查找到与源表对应的记录,就要每行都提交一遍,如果目标表有仅仅几千条记录,性能就很差了。
现在需要想个办法,让程序每更新100条记录,然后再向目标库中提交1次,这样就可以避免每行都提交,可提高几十倍的速度。
我是这样实现的:
//ClientDataSet1:源表
//ClientDataSet2:目标表,Provider是:DataSetProvider
//获取所有源表数据。
ClientDataSet1.Close;
ClientDataSet1.Open;
//在目标表中,通过SQLQuery,获取了与源表当前记录的主键值相同的记录,假设每次都可以在目标表中找到一条对应记录
SQLQuery.SQL.Text='select * from ****';
SQLQuery.Open;
//将数据DataSetProvider中的数据(就是查找到的目标表的数据)添加到ClientDataSet2中
ClientDataSet2.AppendData(DataSetProvider.Data, True);
//移动到最后一行,编辑数据,将源数据更新到目标表中
ClientDataSet2.Last;
ClientDataSet2.Edit;
ClientDataSet2.Fields[0].Value := ClientDataSet1.Fields[0].Value;
ClientDataSet2.Fields[1].Value := ClientDataSet1.Fields[0].Value;
ClientDataSet2.Post;
//重复以上步骤,直到目标表更新了100条记录后,再将数据提交到数据库中
ClientDataSet2.ApplyUpdates(-1)
就在提交数据的时候出现了错误,试了很多便都不行,根本不能提交到目标数据库中,一直不知该如何处理,急盼高手能给以解答,谢谢!!!
目的是:从源读取数据向目标表更新数据。现采用TClientDataSet来实现
有以下情况
1、读取源表的一条记录
2、从目标库中查找到与源表当前记录的主键相同的记录,并取到TClientDataSet缓存中
3、将源表中查找到的记录替换目标表对应的记录
4、保存目标表
其中源表和目标表结构完全一样
1-3步速度很快,但第4步速度较慢,因为需要向目标库中提交数据。
如果采用以上方法,则每在目标表中查找到与源表对应的记录,就要每行都提交一遍,如果目标表有仅仅几千条记录,性能就很差了。
现在需要想个办法,让程序每更新100条记录,然后再向目标库中提交1次,这样就可以避免每行都提交,可提高几十倍的速度。
我是这样实现的:
//ClientDataSet1:源表
//ClientDataSet2:目标表,Provider是:DataSetProvider
//获取所有源表数据。
ClientDataSet1.Close;
ClientDataSet1.Open;
//在目标表中,通过SQLQuery,获取了与源表当前记录的主键值相同的记录,假设每次都可以在目标表中找到一条对应记录
SQLQuery.SQL.Text='select * from ****';
SQLQuery.Open;
//将数据DataSetProvider中的数据(就是查找到的目标表的数据)添加到ClientDataSet2中
ClientDataSet2.AppendData(DataSetProvider.Data, True);
//移动到最后一行,编辑数据,将源数据更新到目标表中
ClientDataSet2.Last;
ClientDataSet2.Edit;
ClientDataSet2.Fields[0].Value := ClientDataSet1.Fields[0].Value;
ClientDataSet2.Fields[1].Value := ClientDataSet1.Fields[0].Value;
ClientDataSet2.Post;
//重复以上步骤,直到目标表更新了100条记录后,再将数据提交到数据库中
ClientDataSet2.ApplyUpdates(-1)
就在提交数据的时候出现了错误,试了很多便都不行,根本不能提交到目标数据库中,一直不知该如何处理,急盼高手能给以解答,谢谢!!!