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