FDQuery的分页

分页方法,其中 PageSize 为分页大小, PageIndex 页码 ,0 为第一页 ,RecsSkip 可以通过  PageSize * PageIndex 计算出来,如下:

 

procedure TForm1.PagingQuery(Query: TFDQuery; PageSize, PageIndex: Integer);
begin
  Query.Disconnect;
  Query.FetchOptions.RecsSkip := PageSize * PageIndex;
  Query.FetchOptions.RecsMax := PageSize;
  Query.Open;
end;

 

以上可以看出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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章