使用 FireDAC 分页查询
FireDAC 原生支持分页查询,不用写分页查询SQL,只要设置 FetchOptions.Recskip (跳过的行数)和 RecsMax(分页大小)允许通过结果集进行分页。打开游标后,将跳过第一个 RecsSkip
。其余的记录,最多 RecxMax 将被获取。当 Prepared 后,更改 RecsSkip 和 RecsMax属性值不起作用。因此,在获取下一行页之前,该命令必须未准备,然后再次执行。例如:
// 分页大小为 20,查询第一页FDQuery1.FetchOptions.RecsSkip := 0;FDQuery1.FetchOptions.RecsMax := 20;FDQuery1.Open;// process rows// 查询第 2 页FDQuery1.Disconnect;FDQuery1.FetchOptions.RecsSkip := 20;FDQuery1.Open;// process rows// 查询第 3 页FDQuery1.Disconnect;FDQuery1.FetchOptions.RecsSkip := 40;FDQuery1.Open;// process rows
我们可以简单封装程一个分页查询过程,其中 PageSize 为分页大小, PageIndex 页码 ,0 为第一页 ,RecsSkip 可以通过 PageSize * PageIndex 计算出来,如下:
procedure TForm1.PagingQuery(Query: TFDQuery; PageSize, PageIndex: Integer); beginQuery.Disconnect;Query.FetchOptions.RecsSkip := PageSize * PageIndex;Query.FetchOptions.RecsMax := PageSize;Query.Open; end;
研究了MySQL可以使用limit offset,count的方式分页
--示例:从第100条开始取10条记录
select * form tablename limit 100, 10
Oracle可以用rownum + minus关键字
--示例:rownum只能使用<、<=、<>操作符
--rownum参考:https://blog.csdn.net/qq_39196949/article/details/84379874
--minus参考:https://blog.csdn.net/weixin_39960155/article/details/79612237
--取第5到8条记录,rownum <= 8是取1-8条记录,rownum < 5取1-4记录,最后1-8里减去1-4剩下5-8
SELECT * from t1 where rownum <= 8
minus --第一个结果集减去第二个结果集的意思
SELECT * from t1 where rownum < 5
SQLServer分页比较麻烦,必须要有排序字段,例如:ID字段,最好选用主键字段,速度比较快,如果没有主键又选了个长字符串字段就会非常的慢
--参考:https://blog.csdn.net/sjzs5590/article/details/7337541?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai
--看帖子一定要看评论,写博客一定要先验证了再写
--解释:选pageSize条记录,id应该不属于已排除的范围(排除范围就是要路过的记录)
select top @pageSize id from tableName
where id not in (
select top (@pageNo-1)*@pageSize id from tableName
)
以上可以看出SQLServer分页必须要有排序字段,这不通用啊,都快要放弃了,结果发现FireDAC居然天生支持分页
procedure OpenAndGetAnyPage(PageIndex, PageSize: Integer; SqlText: string);
var
Qry: TFDQuery;
begin
Qry := TFDQuery.Create(Self);
try
Qry.Connection := Connection;// 数据库连接控件
Qry.FetchOptions.RecsSkip := PageSize * PageIndex;// 跳过的记录数(PageIndex 0~N)
Qry.FetchOptions.RecsMax := PageSize;// 每页最大记录(大于0)
Qry.SQL.Text := SqlText;// select * from tablename
Qry.Prepare;// 准备
Qry.Open;// 打开(不能用Open(SQL)的方式,必须先Prepare)
// 遍历数据
while not Qry.Eof do
begin
//TODO 处理
Qry.Next;
end;
finally
Qry.Free;
end;
end;
https://blog.csdn.net/cmd9x
https://www.cnblogs.com/rtcmw/p/13813546.html
使用 FireDAC 分页查询相关推荐
- [JAVA EE] JPA 查询用法:自定义查询,分页查询
项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...
- jpa分页查询_spring data jpa 居然提供了这么多查询方式!
spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...
- Oracle中分页查询语句
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...
- Castle ActiveRecord学习(四)延迟加载、分页查询、where条件
一.延迟加载 //用户发布的主题,一对多:Table:外键表:ColumnKey:外键:Lazy:延迟加载:Cascade:级联操作(级联删除)[HasMany(typeof(ThemeInfo), ...
- 【sql】实现分页查询
分页查询,以五条五条查询为例: 代码实现: select * from goods_list LIMIT 0 , 5; 从第0条开始,查询五条
- java中的分页 效率考虑_面试官:数据量很大,分页查询很慢,有什么优化方案?...
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点. 下面简单说一下我知道的一些 ...
- Oracle的分页查询
为什么80%的码农都做不了架构师?>>> 因为Oracle不像MySQL一样有limit函数来实现分页查找,oracle要实现分页查询可使用关键字rownum来处理.使用row ...
- mysql临时表如何分页查询慢_数据量很大,分页查询很慢,怎么优化?
作者:悠悠i,来源: http://uee.me/aVSnD 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分 ...
- SQL Server中的分页查询
分页查询很简单,具体代码如下: --分页查询--查询1-3行数据 select top 3 * from emp order by sal desc;--查询4-6行数据 select top 3 * ...
最新文章
- Linux基础命令---e2fsck
- python与excel的区别-Python比较两个excel文档内容的异同
- [原创]微软网络协议数据分析工具 Microsoft Network Monitor 介绍
- 6,ORM组件XCode(撬动千万级数据)
- 百度吴恩达:图像和音视频搜索是人工智能新方向
- Android的Gson的使用方法,实现Json结构间相互转换
- Linux shell脚本中单双引号的区别
- Python 21 Django 实用小案例1
- ETL异构数据源Datax_图形化数据同步_11
- 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)
- java程序实验报告_实验报告一
- 程序员接私单操作流程。
- 2021金山WPS秋招前端笔试题
- autojs之启动页
- 查看DBUS接口的工具: D-Feet
- world添加水印java,Java添加水印到Word文档
- 背包问题(01背包,完全背包,多重背包(朴素算法二进制优化))
- C# 获取某个时间的0点0分和23点59分59秒
- WIN10没有照片查看器【已解决】
- 3.4 学编程不拘于语言,学语言不限于平台——《逆袭大学》连载
热门文章
- Windows定时任务计划程序配置
- uniapp 背景动画 执行一次
- 质因数的求解(C语言和C++)
- 给ChatGLM2注入知识;阅文集团发布首个网文大模型“阅文妙笔”
- android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具
- C# textBox控件焦点转移
- Hybris培训团购课程开团啦!
- 制作属于自己的过狗菜刀:为菜刀添加接口
- 异业联盟的案例分析,引流成功的方案
- jQuery图片切换,轮播效果(仿迅雷首页FLASH效果)