FireDAC分页

6 篇文章 0 订阅
3 篇文章 0 订阅

研究了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;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值