如何在Delphi中通过UniDac组件实现分页功能
UniDac UniQuery 无SQL实现分批加载(分页)方案
要实现无需手动编写分页SQL的分批加载,核心是正确配置UniQuery的FetchOptions属性,以下是具体步骤和示例:
关键配置说明
你之前仅设置FetchOptions.RecsMax无效,是因为默认AutoFetchAll为True,会一次性拉取所有数据,必须先关闭这个属性:
FetchOptions.AutoFetchAll := False:禁止自动加载全部数据FetchOptions.RecsMax := N:设置每次加载的记录数量(N为你需要的每页条数)
示例代码(Delphi环境)
// 初始化组件配置 procedure TForm1.FormCreate(Sender: TObject); begin // 数据库连接代码省略,确保UniQuery已关联有效连接 UniQuery1.FetchOptions.AutoFetchAll := False; UniQuery1.FetchOptions.RecsMax := 2; // 每次加载2条数据 UniQuery1.SQL.Text := 'SELECT * FROM YourTargetTable'; // 无需分页SQL end; // 加载第一批数据 procedure TForm1.btnFirstBatchClick(Sender: TObject); begin UniQuery1.Open; // 此时DataSet中仅包含前2条记录 end; // 加载下一批数据 procedure TForm1.btnNextBatchClick(Sender: TObject); begin if not UniQuery1.Eof then UniQuery1.FetchNext; // 调用后,DataSet会追加下一批2条记录,直到所有数据加载完成 end; // 跳转到指定页(可选) procedure TForm1.GoToPage(PageIndex: Integer); var PageSize: Integer; begin PageSize := 2; UniQuery1.Close; UniQuery1.FetchOptions.RecsSkip := (PageIndex - 1) * PageSize; // 跳过前面的页数 UniQuery1.Open; end;
注意事项
- 若使用
RecsSkip跳页,每次跳转前需要先关闭UniQuery再重新打开 - 不同数据库的底层实现可能略有差异,但UniDac会自动适配,无需修改SQL
- 确保
UniQuery的CursorType设置为ctStatic或ctForwardOnly(根据需求选择)
内容的提问来源于stack exchange,提问作者Dreamer64
相关产品推荐
相关产品推荐

