首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

能否边查询,边显示?该怎么处理

2012-02-15 
能否边查询,边显示?我这边软件使用的是三层结构,大数据量查询的时候,效率不理想,并且“死机”,白屏。我想实现

能否边查询,边显示?
我这边软件使用的是三层结构,大数据量查询的时候,效率不理想,并且“死机”,白屏。 

我想实现的功能是将大数据量的查询分解为若干小的查询。用多线程进行。最后汇总为一个数据集。 

目前基本功能已经实现,但有一点不足:全部数据装载到ClentdataSet后,才显示数据。 
这个过程大概有几秒(数据量大的时候)。 
既然已经是多线程查询了,能否边查询,边显示?
顶者有分啊 


[解决办法]
呵呵,学习中,我也不会,初学者!关注中!
[解决办法]
学习
[解决办法]
学习中
[解决办法]
clientdataset貌似增量获取数据的,这样就能满足你的需求了
[解决办法]
“貌似增量获取数据的”改为“貌似可以增量获取数据的”
[解决办法]
关注中
[解决办法]
mark
[解决办法]
是不是通过设置packetrecord来控制?
[解决办法]
三层没玩过。。两层有异步,那就是你所需要的
[解决办法]
是通过packetrecords,试试具体效果怎样
[解决办法]
大量查询数据的时候 
可以多取几个条件啊、像月份查询、分查询等。
还有都已经用3层了,建议写个数据集控件,功能数据承载能力都更强。(:
[解决办法]
有2个办法,嘿嘿

1.就是捕获你向下滑动的消息,当你譬如点滚动轴的时候,这时候计算现在的id,后台用select top 100 where id > _id的方法。。。这样每次显示100个,每次要向下时,后台马上再取数据。。。
2.你分页显示,嘿嘿。每页就100条,就算100万条记录,你都很快,嘿嘿

[解决办法]
可以在循环中加入Application.ProcessMessages;
就像这样
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to 999999 do
begin
Canvas.TextOut(10, 10, IntToStr(i));
Application.ProcessMessages;
end;
end;

譬如: 运行中你拖动窗体, 循环会暂停下来...
[解决办法]
数据查询,时间大致花在一下几点:

1、服务端查询时间;
2、数据传输时间;
3、客户端数据集装载时间;

首先,第二点:数据传输时间基本上受制于网络,除非你考虑压缩传输及其他高效方法,但基本上收效不大;
其次,服务端的查询时间,这个千万不要忽略,在大数据量情况下,查询设置尤其重要;举个例子:服务端
有个AdoQuery,只使用它进行查询而不更新数据,则可以进行以下设置,则速度可以成倍提高:
AdoQuery.CursorLocation := clUseServer;
AdoQuery.CursorType := ctOpenForwardOnly;
AdoQuery.LockType := ltReadOnly;
AdoQuery.EnableBCD := True;

再次,使用clientdataset数据集装载数据,如果数据量比较大,从数据转化为记录还是需要一定的时间的;

从上面3点可以看到,最好优化的就是服务端的查询,其他2点可能你费很大力气也很难提高多少的;
 

热点排行