现设置了adoquery.Reordset的AbsolutePage、PageCount、PageSize属性,为什么在dbgrid中仍然不能实现分页显示?

解决方案 »

  1.   

    var
      count;
    begin
    count :=0;
    while not adoquery1.eof do
    begin
      with adoquery1 do
      begin
        ......
      end;
      inc(count);
      if count=20 then break;
    end;
    end;
      

  2.   

    to cg1120(代码最优化-§雪是冷的,人是暖的§) :
    所述方法如何实现某一页的显示?(注:不能改变adoquery的sql语句)
      

  3.   

    adoquwry.Filter := '(ID号 >= ' + IntToStr(aStart) + ') AND (ID号<= ' + IntToStr(aEnd) + ')';
      

  4.   

    to cg1120(代码最优化-§雪是冷的,人是暖的§) :
    这样还是改变了adoquery的sql语句(或者说查询结果),将影响其他相关操作,有没有可能通过改变dbgrid或adoquery的其他属性来达到相应的分页显示?
      

  5.   

    如果实在不行,你就用李维在《ADO/MTS/COM+高级程序设计》的216所讲的方法来做吧,设定RECORDSET的PAGESIZE、PAGECOUNT和ABSOLUTEPAGE,具体内容看书上的例子。
      

  6.   

    《ADO/MTS/COM+高级程序设计》自己看吧
    在A D O 的R e c o r d s e t 对象中有一个非常受欢迎的功能就是页次定位,即
    R e c o r d s e t 对象可以把数据表中所有的数据以页次的方式切割,只要程序员指定特
    定的页次号码就可以存取到这个页次中包含的数据。例如,假设在E m p l o y e e 数据
    表中包含了1 0 0 0 笔数据,当页次的大小是1 0 笔数据时,那么整个数据表就切割为
    1 0 0 个不同的页次。因此程序员如果指定页次号码为2 ,就可以存取到第11 ~ 2 0 笔的
    数据。当然,在R e c o r d s e t 对象中程序员可以设定页次的大小以及随意设定目前要
    存取的页次。
    要使用R e c o r d s e t 对象的页面定位功能,程序员可以通过数个R e c o r d s e t 对象的
    属性来完成。这些属性以及它们的意义整理在下面的表格中。属性名称                    意义
    A b s o l u t e P a g e    改变当前P a g e 的位置,设定这个属性可以存取特定P a g e 中的数据。这是一个可擦写的属性P a g e C o u n t          数据表中所有的数据除以P a g e S i z e 之后所得到的P a g e 页数。这是一个只读属性P a g e S i z e            指明每一个P a g e 中包含的数据笔数。这是一个可擦写的属性因此要使用A D O 页面定位功能,程序员只需要使用下面的步骤即可:
    □取得A D O 的R e c o r d s e t 对象。
    □设定R e c o r d s e t 对象的P a g e S i z e 属性值,以决定一个页面包含多少笔数。
    □存取R e c o r d s e t 对象的P a g e C o u n t 以便了解数据表被切割成多少的页面。
    □设定R e c o r d s e t 对象的A b s o l u t e P a g e 属性值以决定要存取的页面数据。
      

  7.   

    如果我没有看错的话,这种分页是假的。在李维的书上他是首先获得所有数据然后在设置PageSize等属性。这种分页这是从感觉上好一点,在性能上并没有实质性的提高。但原生的ADO对象是可以提供分页功能的
      

  8.   

    你用ADOQuery等Delphi封装好的ADO对象是不直接支持实现分页的。你可以用原生的ADO对象分页。在ADOInt单元中