首页 > 解决方案 > 使用 fireac 获取大表中的行

问题描述

我在 sql server 上有一个大表,大约 80 万条记录。

我如何浏览所有记录,一次 x 数量?

例如,我想打开 FDQuery,但一次浏览 1000 条记录。

如果我使用:

FDQuery.First;
while not FDQuery.eof do
begin
   //do something
   FDQuery.Next;
end;

我相信所有的记录都带来了;

我已阅读有关获取记录的信息,例如 FetchOptions:Mode、RowsetSize、RecsMax、RecsSkip 等属性……但我无法浏览所有记录,一次只能浏览固定数量的记录。

标签: sql-serverdelphifiredac

解决方案


您可以使用一些创造力,提供分页并使用在 UI 中配备了漂亮进度条的线程来获取假设每页 100 行。在这种方法中,您必须通过一些智能查询、有时重新加载数据等来管理搜索和过滤器......

如果您使用的是 SQL 服务器,则其中一个选项可能是使用一些排名函数(如 ROW_NUMBER)来获取每个页面。

像这样的东西:

;WITH CTE_Test AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY F1) AS Row_No FROM Tbl_Test
)
SELECT * FROM CTE_Test
    WHERE Row_No BETWEEN 1 AND 100

推荐阅读