如何对远程拥有大量数据数据库进行分页调用显示以保证系统效率和稳定性(100分)

C

chrisn

Unregistered / Unconfirmed
GUEST, unregistred user!
调用远程数据库,从中间层应用服务器提取数据传给客户端
如果数据量很大,一次性传回客户端如果客户端数目多的话,服务器可能无法负载
应用程序会奇慢无比,因为业务逻辑关系,也不能使用李唯那本书上说的用
Clientdataset.beforeGetRecord 和 datasetprovider.beforegetRecord结合使用
TDataSetProvider.Dataset.next来处理,应用服务端由专门函数接受客户端请求
再将数据封装传给客户端,请问有没什么好的方法可以解决此类分页读取功能,服务端
绝对不能为客户端维护任何标识信息,客户端可自己维护标识信息
 
求教各位高手
 
调用TClientDataSet的GetNextPacket方法试一下
 
设置ClientDataSet的FetchOnDemand属性为False
设置PacketRecords为X X为每一页显示数据的条数
增加一个按钮在其click事件中加入 ClientDataSet1.GetNextPacket;
或者在数据源ClientDataSet1的AfterScroll事件中加入如下:
procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
if DataSet.recno>=ClientDataSet1.PacketRecords then
ClientDataSet1.GetNextPacket;
end;
实现分页显示

以上操作的实现是在CORBA和DCOM中实现的,其他的可能也一样
 
ClientDataSet1.GetNextPacket 确实可以实现,但是我是在应用服务器中取得数据后
按照特殊的业务规则打包后在传回客户端,并不是直接由客户端的Clientdataset控件
获取数据,我试过在服务端放一个ClientDataSet控件先取数据,再把其DATA值封装,
但下次要取下一页数据时要保证ClientDataSet控件为该客户端维护前面已取出的数据集
这样如果客户端数目很多的话,系统根本承受不了,Delphi把ClientDataSet功能封装的太
好了,在功能使用上很不灵活,那位大虾能提供更好的方法,主要还是效率问题
 
你可以在服务器端创建一个临时表,把提取的每页的数据写入临时表,然后
再有客户端直接从临时表中取数据,不知到这样行不行.
 
这样要使用多少内存啊,如果客户端数量很多的话,而且访问不同表的话
服务器哪里受得了
 
用sql 语句实现?
 
关注。期待好的解决方法。我采用只读500条记录,剩下的就不管了,每次只做象征的查询,哈哈
 
顶部