Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否可以在打开ADOQuery时显示ADOQuery中的记录?_Sql Server_Delphi_Delphi 2007_Tadoquery - Fatal编程技术网

Sql server 是否可以在打开ADOQuery时显示ADOQuery中的记录?

Sql server 是否可以在打开ADOQuery时显示ADOQuery中的记录?,sql-server,delphi,delphi-2007,tadoquery,Sql Server,Delphi,Delphi 2007,Tadoquery,我有一个数据源链接到DBGrid的ADOQuery。 ADOQuery和数据源位于DataModule中,连接采用另一种形式 在查询获取记录时,有没有办法让我的应用程序显示行? 比如MSSQL管理工作室 select大约需要7分钟来终止执行 我正在使用Delphi 2007。这是一个困难的挑战。如果我需要做大量的查询,我通常会将查询分解成块。然后,我创建一个存储过程,该过程使用参数@ChunkNumber、@ChunkSize和@TotalChunks。因此,您只能对(@ChunkNumber-

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

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

select大约需要7分钟来终止执行


我正在使用Delphi 2007。

这是一个困难的挑战。如果我需要做大量的查询,我通常会将查询分解成块。然后,我创建一个存储过程,该过程使用参数@ChunkNumber、@ChunkSize和@TotalChunks。因此,您只能对(@ChunkNumber-1)@ChunkSize+1到的记录运行查询@ChunkNumber@ChunkSize. 在Delphi代码中,只需运行如下循环(伪代码):

这样,假设您有10000条记录,块大小为100。因此,您将有100个SP呼叫。因此,您可以呈现从SP接收的每个区块,以便用户能够看到表的更新

限制是运行查询时是否需要先在一次命中中运行所有记录。例如,一组人。SQL server使用偏移量,因此您可以组合使用以获得有用的内容

我有一些查询运行大约800K条记录,运行大约需要10分钟,我使用这些记录来执行此操作。但我要做的是将源表分块,然后运行查询,例如,如果一个表用户有1M条记录,并且您希望返回一个显示每小时访问的总页面的查询,那么您可以将用户分块,然后只为每个分块运行查询


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

查询从服务器获取多少记录?为什么连接不在其他组件的同一数据模块中?首先要做的是找出为什么查询执行得如此缓慢-即使是在缓慢的网络上,执行起来应该不需要7分钟,甚至7秒钟。如果服务器在同一台机器上,它实际上应该是即时的。因此,我建议您至少在问题中添加查询的Sql、用于执行查询的确切代码以及AdoQuery拥有的所有事件处理程序的代码。如果没有这些,我怀疑任何人都能帮助您。在mssql management studio中,查询运行是否也一样慢?如果是这样,请向我们展示您的查询。问题是,OP从未解释为什么他的查询运行如此缓慢(7分钟检索2500行)。同意,但具体问题是如何在不等待整个过程运行的情况下逐步在DataGrid中呈现数据。如果OP问“为什么我的查询速度这么慢”,也许这是一个更适合我们回答的问题:但这是一个德尔福q,而你的回答并没有解决这个问题。Delphi ADO查询本质上能够异步返回结果,并且在任何情况下都可以检索后台线程中的行,并定期更新它们在gui中的显示(如果应用程序编码为这样做)。是的,但您没有考虑的是SQL server本质上不提供此功能。它将消失,运行查询,完成后返回结果。。。所以,如果SQL server需要7分钟的响应时间,那么Delphi就不会有任何东西可以异步呈现。“SQL server本身并没有提供这种功能。”真的吗?那么,您如何解释OP想要模仿的SSM的行为以及本文中所说的内容:
for(Chunk = 1 to TotalChunks)
{
       DataTableResults = sp_SomePrecedure @ChunkNumber = @Chunk, 
                           @ChunkSize = ChunkSize
       RenderTableToClient(DataTableResults)
}