ADO的MoveBy方法效率问题。怎么就没有人回答呢??????????? (50分)

  • 主题发起人 主题发起人 憔悴
  • 开始时间 开始时间

憔悴

Unregistered / Unconfirmed
GUEST, unregistred user!
当数据量很大的时候,比如50000条,用MoveBy时间非常长。请问有什么方法可以
优化或者替代?
10000条.....6s
20000条.....24s
............
背景是这样的:一个ISAPI程序(Web程序),查询数据时分页显示,而分页的时候
比如显示第5页,每页有100条数据,那么ADO Select 数据后,将MoveBy(400),而
显示第500页时,将MoveBy(49000),这个速度无法忍受。
由于MoveBy(负数)的效率很低,所以中分的话也优化不了多少。不知各位大侠有何
高见?
 
在Adodataset中有一个Recordset的属性,通过它可以进行数据的分页
代码如下:
var rowcount:integer;
Pagecount:integer;
Reccount:integer;
.....
begin
with Adodataset1 do
begin
open;
Reccount:=recordcount; //获取Adodataset的记录数

Recordset.Set_PageSize (10); //假设每个数据页要有10笔数据
rowcount:=recordset.pagesize;

Pagecount:=Recordset.PageCount; //获得页数,假如记录数为27,pagesize是10,那么页数就是3
Recordset.Set_AbsolutePage (3); //假设你需要第3页的数据,也就是第21到27笔数据

//不要让AbsolutePage大于pagecount,这个例子是3

showmessage(inttostr(Adodataset1.Recordset.AbsolutePosition));//这里会显示“21”

//开始显示数据
repeat
//在这里处理数据
Recordset.Fields.Item[N].Value;//数据集的第N个字段内容

rowcount:=rowcount-1;
Recordset.MoveNext
until (Recordset.EOF ) or (rowcount=0);//最后一页记录数可能比pagesize要小。
..........
end;
end;
这个方法是通过对Recordset操作获取指定范围内的数据的例子,数据的显示要你自己完成,比如加到表格里或
Listview中,我还不知道如何把它显示在Dbgrid中去。






 
后退
顶部