怎么用ADOQuery实现分页查询啊!我都快急疯了,有人说李维的那本ADO书上有例子,可是我下载的版本没有后面的部分,如果哪位有例子给我,那就太好了!我愿意奉上500分!!!解决的也有500分!决不食言!

解决方案 »

  1.   

    adoquery实现分页查询??你的意思是提指定笔数的记录吧.你是在三层的客户端实现,还是在两层的客户端实现呀.如果在三层的客户端的实现,设置TclientDataSet的packetrecords属性即可,如果是两层则比较麻烦.如果你是用MSSQL,则可在sql语句中用select top your_record_count .... from 来取得指定的笔数;如果是Oracle,则可用select * .... where rownum <= your_record_count来实现.
      

  2.   

    /*表结构*/
    create table src(field1 int);
    insert into src values(1);
    insert into src values(2);
    insert into src values(3);
    insert into src values(4);
    insert into src values(5);
    insert into src values(6);
    insert into src values(7);
    insert into src values(8);
    insert into src values(9);/*参考如下SQL语句~~*//*1..3*/
    select top 3 * from (select top 9 * from srb order by field1 desc) order by field1/*4..5*/
    select top 3 * from (select top 6 * from srb order by field1 desc) order by field1/*6..9*/
    select top 3 * from (select top 3 * from srb order by field1 desc) order by field1
      

  3.   

    dbExpress 中的TSIMPLEDATASET 中的PACKETRECORDS 设为你要的页数
    TADOQUERY 相同
      

  4.   

    同意 zswangII(伴水清清)(职业清洁工)
      

  5.   

    差不多是这样了
    sqlserver:select top 10 from.......
    oracle :select * from ....where rownum<=10
      

  6.   

    借助与TClientDataSet就可以实现分页查询
      

  7.   

    ClientDataSet1的ProviderName为DataSetProvider1
    DataSetProvider1的DataSet连接Adoquery1
      

  8.   

    to delphi_xizhousheng(西周生) 如果使用SQL语句实现的话。用一个按钮来显示下15个记录(15个记录为一页,用一个按钮来翻页),怎么办?
      

  9.   

    實現分頁查詢:
    declare @sqlstr varchar(8000)
    set @sqlstr='select top '+cast(@每頁大小 as varchar)+' * from 表 where 主鍵列 not in (select top '+ cast(@每頁大小-1*@第幾頁 as varchar) + ' 主鍵列 from 表)' 
    exec (@sqlstr)
      

  10.   

    如果你设定了页数,然后再结合条件来实现查询呀.比如你的条件最初查询的是
    select top 15 * from table;
    下一页时则为
    select top 15 * from table where 你的关键识别字段>你的最后一条记录的关键识别字段的值.依此类推.
      

  11.   

    to menliwxj(有缘) 您能不能举个例子!谢谢!
      

  12.   

    在mssql7.0/2000中.
    create table test (
     Field1 integer,
     Field2 char(4),
     Field3 varchar(8)
    )-----初始化数据
    insert into test values (1, '0001','test0001')
    insert into test values (2, '0002','test0002')
    ....
    insert into test values (15, '0015','test0015')
    insert into test values (16, '0016','test0016')
    ...
    insert into test values (31, '0031','test0031')
    insert into test values (32, '0032','test0032')
    ...
    你初始化一百条记录吧.然后实现查询语句.
    第一次取记录:
    sql := 'select top 15 * from test order by Field1';
    adoquery1.sql.text := sql;
    第二次取记录:
    adoquery1.last;
    sql := 'select top 15 * from test where Field1 > '+adoquery1.FieldByName('Field1').AsString + ' order by Field1';
    adoquery1.sql.text := sql;
    以后与第二次取记录的方式相同.
      

  13.   

    要是在Oracle中,每次去10条记录的话
    第一次取10条
    select * from table where rownum<=10
    第二次
    (select * from table where rownum<=20) minus
    (select * from table where rownum<=10)  --oracle中内置变量Rownum不支持大于运算
    后面的就依次类推
      

  14.   

    1、取得 ADO 的 Recordset 对象
    2、设置  Recordset 对象的 PageSize 属性,以决定一个页面包含多少纪录
    3、读取 Recordset 对象的 PageCount 就知道数据表被切割成了多少页面
    4、设定 Recordset 对象的 AbsolutePage 来决定要存取的页面数据
      

  15.   

    to leapmars(流铭) 怎么取得ADO的RecordSet对象!?能举个例子吗?
      

  16.   

    ADO 组件有 Recordset 属性,它操纵的就是原生的 ADO Recordset 对象。property Recordset: _Recordset;
    ADOQuery1.Recordset.PageSize := 100;   // 一个页面包含100 条纪录
    ADOQuery1.Recordset.AbsolutePage := 2;  // 当前 ADOQuery1 存放了第二个页面的数据具体的解释可以查看 MSDN。
      

  17.   

    to menliwxj(有缘) 下翻页是解决了,那么上翻页呢?为什么我总是回到第一页呢?我是这样的:
    adoquery1.last;
    sql := 'select top 15 * from test where Field1 < '+adoquery1.FieldByName('Field1').AsString + ' order by Field1';
    adoquery1.sql.text := sql;
      

  18.   

    to  wush007(防守反击) 如果您有更好的办法,请贴出来,我照样给分!
      

  19.   

    我虽然已经几乎解决了问题,可是不是很满意,但是还是很感谢大家的帮忙,我结贴了!menliwxj(有缘) 的500分在灌水区去领!