adoquery实现分页查询??你的意思是提指定笔数的记录吧.你是在三层的客户端实现,还是在两层的客户端实现呀.如果在三层的客户端的实现,设置TclientDataSet的packetrecords属性即可,如果是两层则比较麻烦.如果你是用MSSQL,则可在sql语句中用select top your_record_count .... from 来取得指定的笔数;如果是Oracle,则可用select * .... where rownum <= your_record_count来实现.
/*表结构*/ 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
to delphi_xizhousheng(西周生) 如果使用SQL语句实现的话。用一个按钮来显示下15个记录(15个记录为一页,用一个按钮来翻页),怎么办?
實現分頁查詢: declare @sqlstr varchar(8000) set @sqlstr='select top '+cast(@每頁大小 as varchar)+' * from 表 where 主鍵列 not in (select top '+ cast(@每頁大小-1*@第幾頁 as varchar) + ' 主鍵列 from 表)' exec (@sqlstr)
如果你设定了页数,然后再结合条件来实现查询呀.比如你的条件最初查询的是 select top 15 * from table; 下一页时则为 select top 15 * from table where 你的关键识别字段>你的最后一条记录的关键识别字段的值.依此类推.
to menliwxj(有缘) 您能不能举个例子!谢谢!
在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; 以后与第二次取记录的方式相同.
要是在Oracle中,每次去10条记录的话 第一次取10条 select * from table where rownum<=10 第二次 (select * from table where rownum<=20) minus (select * from table where rownum<=10) --oracle中内置变量Rownum不支持大于运算 后面的就依次类推
to menliwxj(有缘) 下翻页是解决了,那么上翻页呢?为什么我总是回到第一页呢?我是这样的: adoquery1.last; sql := 'select top 15 * from test where Field1 < '+adoquery1.FieldByName('Field1').AsString + ' order by Field1'; adoquery1.sql.text := sql;
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
TADOQUERY 相同
sqlserver:select top 10 from.......
oracle :select * from ....where rownum<=10
DataSetProvider1的DataSet连接Adoquery1
declare @sqlstr varchar(8000)
set @sqlstr='select top '+cast(@每頁大小 as varchar)+' * from 表 where 主鍵列 not in (select top '+ cast(@每頁大小-1*@第幾頁 as varchar) + ' 主鍵列 from 表)'
exec (@sqlstr)
select top 15 * from table;
下一页时则为
select top 15 * from table where 你的关键识别字段>你的最后一条记录的关键识别字段的值.依此类推.
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;
以后与第二次取记录的方式相同.
第一次取10条
select * from table where rownum<=10
第二次
(select * from table where rownum<=20) minus
(select * from table where rownum<=10) --oracle中内置变量Rownum不支持大于运算
后面的就依次类推
2、设置 Recordset 对象的 PageSize 属性,以决定一个页面包含多少纪录
3、读取 Recordset 对象的 PageCount 就知道数据表被切割成了多少页面
4、设定 Recordset 对象的 AbsolutePage 来决定要存取的页面数据
ADOQuery1.Recordset.PageSize := 100; // 一个页面包含100 条纪录
ADOQuery1.Recordset.AbsolutePage := 2; // 当前 ADOQuery1 存放了第二个页面的数据具体的解释可以查看 MSDN。
adoquery1.last;
sql := 'select top 15 * from test where Field1 < '+adoquery1.FieldByName('Field1').AsString + ' order by Field1';
adoquery1.sql.text := sql;