【发布时间】:2014-08-07 08:50:53
【问题描述】:
打开返回大型数据集(大约 700,000 行和 75 列)的 TADOQuery 时出现“对象已打开”错误。
我的 8 个字段是派生字段为 varchar(200),我发现如果我将它们更改为 varchar(95) 或更小,或者 varchar(256) 或更大,则不会发生错误,即只有错误出现在 96-255 范围内。如果我从查询中删除这些列,或者选择较少的行,也不会发生该错误。
谷歌搜索表明这是 SQLOLEDB 的一个已知错误,其中 nvarchar 字段大于 127,但对我而言并非如此。我正在使用 SQLOLEDB,但我尝试改用 SQL Server Native Client,但仍然出现错误。
任何人都可以对此有所了解,我很难过。我使用的是 Delphi 5 和 SQL Server 2008R2,查询将数据选择到临时表中,然后从临时表中进行选择,如下所示(注意这是实际查询的简化版本,它使用 75 列和 8 个表):
select memno, surname, forename,
'EE Conts in Year'= CAST('' as varchar(200)),
'ER Conts in Year'= CAST('' as varchar(200)),
'AVC Conts in Year'= CAST('' AS VARCHAR(200)),
'ERAVC Conts in Year'= CAST('' AS VARCHAR(200)),
'Total EE Conts'= CAST('' AS VARCHAR(200)),
'Total ER Conts'= CAST('' AS VARCHAR(200)),
'Total AVC Conts'= CAST('' AS VARCHAR(200)),
'Total ERAVC Conts'= CAST('' AS VARCHAR(200)),
into #tmptab
from members
select * from #tmptab
order by surname
谢谢
【问题讨论】:
-
该错误对应于
DB_E_OBJECTOPEN错误,这(除了错误)意味着您的提供商需要打开另一个连接以支持该操作。您是否尝试过link 中的说明? -
感谢您的信息,我已经尝试了该帖子中的建议,但无济于事。我尝试将“多个连接”显式设置为 True(尽管老实说它已经是 True),我尝试仅为此查询使用单独的连接,并尝试为此查询使用单独的 TADOQuery,但仍然出现错误。跨度>
-
我似乎记得
Delphi-5ADO库存在一些问题,并且发布了一个补丁。你安装了吗?不知道它是否会有所帮助,但值得一试。 -
您可以edit 添加实际的表定义(DDL 语句)来创建导致问题的表吗?到目前为止,您发布的内容是要求我们根据很少的信息推测可能是什么问题,而这种类型的问题在这里并不合适。
-
Guillem,是的,你没记错,我使用的是 ADO 的补丁版本。
标签: sql-server delphi ado delphi-5