我观前辈的帖子皆由于数据库的SQL大不一致且SQL SERVERACCESS等菜鸟级数据库没有如rowid_n_obs等之类的辅助列空有BETWEEN运算符而无用武之地又无如except之类的数据集运算符真是令无数英雄尽折腰
偶详观各数据库SQL得出是数据库就有取前面N条记录的SQL语法如什么select top n*****之类的语法而数据分页的关键问题是取后N条记录的语法偶深思良久最后小悟故出此言还忘前辈们多多指点
取记录集后N条记录的大法
假设
有一sql语句将产生条记录 (select 唯一ID其他字段 from 表集 where 条件 order by 排序)
每页显示条记录当前显示第页
实现如下select * from
(
select * from (select top * 唯一ID其他字段 from 表集 where 条件 order by 排序) as a
union all
select * from (select top * 唯一ID其他字段 from 表集 where 条件 order by 排序) as b
)
a
group by 唯一ID其他字段 having count(唯一ID)= order by 排序
运行此SQL至此取记录集后N条记录大法就些完毕
详细说明
此SQL语句的关键应用技巧在于union all和分组上的条件过滤语句
大家可以根据此技巧完全可以做出一个通用的分页方法如直接由用户传入sqlstr(sql语句)NumPerPage(每页显示数)currpage(当前页)自己在再函数内组织成通成的SQL分页语句
备注
当前页为的话就不需要运行该SQL了直接TOP一下就OK了由于没有环境该SQL性能无法测试但相信不会低效运行平台在accesssqlserver上都可运行其它数据库平台只需改top关键字应该就可以就地运行了