6

我有一个通过数据源链接到 DBGrid 的 ADOQuery。
ADOQuery 和 DataSource 位于 DataModule 中,并且连接采用另一种形式。

有没有办法让我的应用程序在查询获取记录时显示行?
像 MSSQL 管理工作室。

选择大约需要 7 分钟才能终止执行。

我正在使用德尔福 2007。

4

1 回答 1

0

一个艰难的挑战。如果我需要进行大量查询,我通常会将查询分成块。然后我创建了一个带有参数@ChunkNumber、@ChunkSize 和@TotalChunks 的存储过程。因此,您将只对从 (@ChunkNumber-1) @ChunkSize+ 1 到 @ChunkNumber @ChunkSize 的记录运行查询。在您的 Delphi 代码中,只需运行这样的循环(伪代码):

for(Chunk = 1 to TotalChunks)
{
       DataTableResults = sp_SomePrecedure @ChunkNumber = @Chunk, 
                           @ChunkSize = ChunkSize
       RenderTableToClient(DataTableResults)
}

这样,假设您有 10,000 条记录,块大小为 100。所以您将有 100 个 SP 调用。因此,您可以渲染从 SP 接收到的每个块,以便用户能够看到表的更新。

限制是查询运行是否需要首先一次运行所有记录。例如分组依据。SQL Server 使用 OFFSET,因此您可以组合起来获得有用的东西。

我有运行大约 800K 记录的查询需要大约 10 分钟才能运行,我这样做了。但是我所做的是将源表分块然后运行查询,例如,如果一个表用户有 1M 条记录,并且您想要返回一个显示每小时访问的总页数的查询,您可以将用户分块并运行查询仅每个块。

抱歉,我没有具体的代码示例,但希望这个建议能引导您朝着积极的方向发展。

于 2017-03-08T09:17:46.573 回答