查看: 99|回覆: 1

delphi FireDAC 分页查询

[複製鏈接]

1

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-7-4
發表於 2023-9-16 18:32:00 | 顯示全部樓層 |閲讀模式

FireDAC 分页查询

代码

分页查询

procedure TForm1.Button1Click(Sender: TObject);
begin
  //设置每页返回的记录数(获取的最大记录数)
  FDQuery1.FetchOptions.RecsMax := 20;
  //获取第1页的数据(从0开始,相当于SELECT * FROM tceshi LIMIT 20 OFFSET 0)
  FDQuery1.FetchOptions.RecsSkip := 0;
  //查询数据
  Memo1.Lines.Add('第1页的数据-------------------------');
  FDQuery1.Open('SELECT * FROM tceshi');
  while not FDQuery1.Eof do
  begin
    Memo1.Lines.Add(FDQuery1.Fields[0].AsString);
    FDQuery1.Next;
  end;
  Memo1.Lines.Add('第2页的数据-------------------------');
  //更改RecsSkip前使用
  FDQuery1.Disconnect;
  //获取第2页的数据(从20开始,相当于SELECT * FROM tceshi LIMIT 20 OFFSET 20)
  FDQuery1.FetchOptions.RecsSkip := 20;
  //查询数据
  FDQuery1.Open('SELECT * FROM tceshi');
  FDQuery1.First;
  while not FDQuery1.Eof do
  begin
    Memo1.Lines.Add(FDQuery1.Fields[0].AsString);
    FDQuery1.Next;
  end;
end;

方法

FireDAC.Stan.Option.TFDFetchOptions.RecsMax

property RecsMax: Integer;

Unit

FireDAC.Stan.Option

控制要获取的最大记录数。限制从单个结果集中获取的记录数。默认值为 -1

要更改已准备好的数据集的 RecsMax,必须首先调用 Disconnect 方法。

FireDAC 仅返回第一个 RecsMax 记录,其他记录将被丢弃。 -1表示没有限制。

根据不同的 DBMS,RecsMaxRecsSkip 可以转换为 SELECT 语句子句(TOP、LIMIT 等),限制服务器端的结果集。如果 DBMS 不支持此类子句,则会在客户端上执行限制。

FireDAC.Stan.Option.TFDFetchOptions.RecsSkip

property RecsSkip: Integer;

Unit

FireDAC.Stan.Option

控制要获取的第一条记录的偏移量。指定要从单个结果集开头跳过的记录数。默认值为 -1

要更改已准备好的数据集的 RecsSkip,必须首先调用 Disconnect 方法。

根据不同的 DBMS,RecsMaxRecsSkip 可以转换为 SELECT 语句子句(TOP、LIMIT 等),限制服务器端的结果集。如果 DBMS 不支持此类子句,则会在客户端上执行限制。

FireDAC.Comp.DataSet.TFDDataSet.Disconnect

procedure Disconnect(AAbortJob: Boolean = False);

Unit

FireDAC.Comp.DataSet

中止当前操作并释放此数据集使用的 DBMS 资源。调用后,数据集处于 dsInactive 状态,并且 Prepared 属性设置为 False



来源:https://www.cnblogs.com/txgh/p/17707098.html
回覆

使用道具 舉報

0

主題

2092

回帖

1萬

積分

琼殿精英

金币
10581
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-6-13 10:15:56 | 顯示全部樓層
感谢楼主的分享!这个FireDAC分页查询的用法总结得很清楚,对于使用Delphi开发数据库应用的网友来说很有帮助。

看到楼主详细介绍了RecsMax和RecsSkip属性的用法,我想补充几点:

1. 关于性能方面,其实在实际项目中,建议在SQL语句中直接使用LIMIT和OFFSET(或者TOP),这样可以让数据库服务器端完成分页,效率会更高一些。FireDAC的这种方式在某些数据库上可能还是在客户端处理分页。

2. 另外如果数据量比较大的话,还可以考虑使用ID字段进行分页,就是记录上一页最后一条记录的ID,然后查询ID大于这个值的记录,这样性能会更稳定。

3. 楼主的代码示例很清晰,对于刚接触FireDAC的开发者来说是很好的学习资料。

期待楼主更多精彩分享![emoji]点赞[/emoji]
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部