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 分页查询相关推荐

  1. [JAVA EE] JPA 查询用法:自定义查询,分页查询

    项目已上传:https://codechina.csdn.net/qq_36286039/javaee 自定义查询 问题:内置的crud功能不满足需求时如何添加自定义查询? 几种自定义查询方法 方法命 ...

  2. jpa分页查询_spring data jpa 居然提供了这么多查询方式!

    spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...

  3. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  4. Castle ActiveRecord学习(四)延迟加载、分页查询、where条件

    一.延迟加载 //用户发布的主题,一对多:Table:外键表:ColumnKey:外键:Lazy:延迟加载:Cascade:级联操作(级联删除)[HasMany(typeof(ThemeInfo), ...

  5. 【sql】实现分页查询

    分页查询,以五条五条查询为例: 代码实现: select * from goods_list LIMIT 0 , 5; 从第0条开始,查询五条

  6. java中的分页 效率考虑_面试官:数据量很大,分页查询很慢,有什么优化方案?...

    当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点. 下面简单说一下我知道的一些 ...

  7. Oracle的分页查询

    为什么80%的码农都做不了架构师?>>>    因为Oracle不像MySQL一样有limit函数来实现分页查找,oracle要实现分页查询可使用关键字rownum来处理.使用row ...

  8. mysql临时表如何分页查询慢_数据量很大,分页查询很慢,怎么优化?

    作者:悠悠i,来源: http://uee.me/aVSnD 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分 ...

  9. SQL Server中的分页查询

    分页查询很简单,具体代码如下: --分页查询--查询1-3行数据 select top 3 * from emp order by sal desc;--查询4-6行数据 select top 3 * ...

最新文章

  1. Linux基础命令---e2fsck
  2. python与excel的区别-Python比较两个excel文档内容的异同
  3. [原创]微软网络协议数据分析工具 Microsoft Network Monitor 介绍
  4. 6,ORM组件XCode(撬动千万级数据)
  5. 百度吴恩达:图像和音视频搜索是人工智能新方向
  6. Android的Gson的使用方法,实现Json结构间相互转换
  7. Linux shell脚本中单双引号的区别
  8. Python 21 Django 实用小案例1
  9. ETL异构数据源Datax_图形化数据同步_11
  10. 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)
  11. java程序实验报告_实验报告一
  12. 程序员接私单操作流程。
  13. 2021金山WPS秋招前端笔试题
  14. autojs之启动页
  15. 查看DBUS接口的工具: D-Feet
  16. world添加水印java,Java添加水印到Word文档
  17. 背包问题(01背包,完全背包,多重背包(朴素算法二进制优化))
  18. C# 获取某个时间的0点0分和23点59分59秒
  19. WIN10没有照片查看器【已解决】
  20. 3.4 学编程不拘于语言,学语言不限于平台——《逆袭大学》连载

热门文章

  1. Windows定时任务计划程序配置
  2. uniapp 背景动画 执行一次
  3. 质因数的求解(C语言和C++)
  4. 给ChatGLM2注入知识;阅文集团发布首个网文大模型“阅文妙笔”
  5. android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具
  6. C# textBox控件焦点转移
  7. Hybris培训团购课程开团啦!
  8. 制作属于自己的过狗菜刀:为菜刀添加接口
  9. 异业联盟的案例分析,引流成功的方案
  10. jQuery图片切换,轮播效果(仿迅雷首页FLASH效果)