FireDAC分页查询
FireDAC原生支持分页查询,不用写分页查询SQL,只要设置FetchOptions.RecsSkip(跳过的行数)和RecsMax(分页大小)允许通过结果集进行分页。
打开游标后,将跳过第一个RecsSkip。其余的记录,最多RecsMax将被获取。当Prepared后,更改RecsSkip和RecsMax属性值不起作用。因此,在
获取下一行页之前,该命令必须未准备,然后再执行。
//分页大小为20,查询第一页
FDQuery1.FetchOptions.RecsSklp:=0;
FDQuery1.FetchOptions.RecsMax:=20;
FDQuery1.Open;
//查询第2页
FDQuery1.Disconnect;
FDQuery1.FetchOptions.RecsSkip:=20;
FDQuery1.Open;
//查询第3页
FDQuery1.Disconnect;
FDQuery1.FetchOptions.RecsSkip:=40;
FDQuery1.Open;
可以简单封装一个分页查询过程,其中PageSize为分页大小,PageIndex页码,0为第一页,RecsSkip可以通过PageSize*PageIndex计算出来
procedure PagingQuery(Query:TFDQuery;PageSize,PageIndex:integer);
begin
Query.Disconnect;
Query.FetchOptions.RecsSkip:=PageSize*PageIndex;
Query.FetchOptions.RecsMax:=PageSize;
Query.Open;
end;
procedure OpenAndGetAnyPage(PageIndex,PageSize:Integer;SqlText:string);
var
Qry:TFDQuery;
begin
Qry:=TFDQuery.create(Self);
try
Qry.Connection:=Conn;//数据库连接控件
Qry.FetchOptions.RecsSkip:=PageSize*PageIndex;//跳过的记录数(PageIndex 0-N)
Qry.FetchOptions.RecsMax:=PageSize;//每页最大记录(大于0)
Qry.Sql.Text:=SqlText;
Qry.Prepare;//准备
Qry.Open;//打开(不用用Open(SQL)的方式,必须先Prepare)
//遍历数据
while not Qry.Eof do
begin
//TODO处理
Qry.next;
end;
Finally
Qry.Free;
end;
end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?