我有一个由DataSource链接到DBGrid的ADOQuery ADOQuery和DataSource位于DataModule中,连接采用另一种形式。
在查询获取记录时,有没有办法让我的应用程序显示行? 与MSSQL Management Studio一样。
选择大约需要7分钟来终止执行。
我正在使用Delphi 2007。
答案 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个记录,并且您想要返回一个显示每小时访问的总页数的查询,则可以将用户组合起来并仅为每个块运行查询。
抱歉,我没有具体的代码示例,但希望这个建议可以带领您朝着积极的方向发展。