You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:07:11