C
cobi
Unregistered / Unconfirmed
GUEST, unregistred user!
1.基本条件
因为数据量比较大,所以每次获取数据的时候都是分段取回的。
分段取回的处理是在服务器端执行SQL并取得一个ClientDataSet结果集,然后将结果集传回客户端并合并到客户端的ClientDataSet中。客户端的ClientDataSet是完全离线的,不跟服务器上的DataSetProvider发生任何联系。
2.处理要求
在本地ClientDataSet进行数据增删改,然后进行提交。
现在我的做法是每处理一条数据,就向服务器提交一次。提交的处理完全是自己写代码完成,不通过控件提供的方法。提交的内容就是ClientDataSet的Delta。
服务器接受到Delta之后,会根据Delta的更新标记(Insert、modify)做一些字段处理,然后用事务提交数据库(通过SQL语句实现),成功后将更新的数据集(用ClientDataset存储)返回客户端,客户端再将最新的数据更新到本地ClientDataSet中。
举一个简单的例子吧,譬如用自增字段做表的主键,那么字段值是在服务器端提交后才产生的,客户端提交的时候根本就没有。提交数据成功之后,字段值就需要回传。Delphi在处理这个上面是有问题的,所以才需要手工处理。我选择回传的是一个ClientDataSet,在本地找到对应的记录后更新它。(这只是一个例子,这种情况其实也可以用另外的方法解决,但我思路的前提是尽量不用控件的方法去处理业务逻辑)
这样做的不好之处在于:因为每处理一条数据就要提交一次,会引起网络roundtrip的增加。但如果一次提交多条数据的话,业务层也可以把他们提交给服务器,就是怎么将提交后的数据一次取回呢?
因为数据量比较大,所以每次获取数据的时候都是分段取回的。
分段取回的处理是在服务器端执行SQL并取得一个ClientDataSet结果集,然后将结果集传回客户端并合并到客户端的ClientDataSet中。客户端的ClientDataSet是完全离线的,不跟服务器上的DataSetProvider发生任何联系。
2.处理要求
在本地ClientDataSet进行数据增删改,然后进行提交。
现在我的做法是每处理一条数据,就向服务器提交一次。提交的处理完全是自己写代码完成,不通过控件提供的方法。提交的内容就是ClientDataSet的Delta。
服务器接受到Delta之后,会根据Delta的更新标记(Insert、modify)做一些字段处理,然后用事务提交数据库(通过SQL语句实现),成功后将更新的数据集(用ClientDataset存储)返回客户端,客户端再将最新的数据更新到本地ClientDataSet中。
举一个简单的例子吧,譬如用自增字段做表的主键,那么字段值是在服务器端提交后才产生的,客户端提交的时候根本就没有。提交数据成功之后,字段值就需要回传。Delphi在处理这个上面是有问题的,所以才需要手工处理。我选择回传的是一个ClientDataSet,在本地找到对应的记录后更新它。(这只是一个例子,这种情况其实也可以用另外的方法解决,但我思路的前提是尽量不用控件的方法去处理业务逻辑)
这样做的不好之处在于:因为每处理一条数据就要提交一次,会引起网络roundtrip的增加。但如果一次提交多条数据的话,业务层也可以把他们提交给服务器,就是怎么将提交后的数据一次取回呢?