分页方法,其中 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;