是否可以在打开ADOQuery时显示记录?

时间:2016-04-13 14:38:40

标签: sql-server delphi delphi-2007 tadoquery

我有一个由DataSource链接到DBGrid的ADOQuery ADOQuery和DataSource位于DataModule中,连接采用另一种形式。

在查询获取记录时,有没有办法让我的应用程序显示行? 与MSSQL Management Studio一样。

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

我正在使用Delphi 2007。

1 个答案:

答案 0 :(得分:0)

艰难的挑战。如果我需要进行大量查询,我通常会将查询分解为块。然后我创建一个存储过程,该过程接受参数@ChunkNumber,@ ChunkSize和@TotalChunks。因此,您只能运行查询(@ ChunkNumber-1) @ChunkSize + 1到@ChunkNumber @ChunkSize的记录。在你的Delphi代码中,只需运行这样的循环(PSeudo Code):

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

通过这种方式,假设你有10,000条记录,块大小为100.所以你将有100个SP呼叫。因此,您可以渲染从SP接收的每个块,以便用户能够看到表更新。

限制是指运行的查询需要首先在一次命中中运行所有记录。例如。分组依据。 SQL服务器使用OFFSET,因此您可以组合以获得有用的东西。

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

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