Vba ADODB查询超时

Vba ADODB查询超时,vba,ms-access,adodb,Vba,Ms Access,Adodb,我正在尝试打开一个查询,该查询正在超时。我尝试设置timeout属性,但它似乎不想接受它 使用MS-SQL Server管理窗口(SQL Server 2005)执行查询需要34秒,因此我知道需要增加超时时间 当前代码: Public Function retRecordSet(StrSQL) Dim cmd ' as new ADODB.Command Dim rs 'As New ADODB.Recordset Set cmd = CreateObject("ADODB.Command")

我正在尝试打开一个查询,该查询正在超时。我尝试设置timeout属性,但它似乎不想接受它

使用MS-SQL Server管理窗口(SQL Server 2005)执行查询需要34秒,因此我知道需要增加超时时间

当前代码:

Public Function retRecordSet(StrSQL)
Dim cmd ' as new ADODB.Command
Dim rs 'As New ADODB.Recordset

Set cmd = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")

cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = StrSQL
cmd.CommandTimeout = 0
Set rs = cmd.Execute

Set retRecordSet = rs
End Function
我还尝试设置连接本身的超时值
CurrentProject.connection.CommandTimeout=120
,但是如果我在这个命令之后查询该值,它将保持在30

连接属性:

Provider=Microsoft.Access.OLEDB.10.0;持久安全信息=False;数据源=MyServer;综合安全=SSPI;初始目录=MyDatabase;数据提供程序=SQLOLEDB.1


对于OLEDB,您不需要在连接上指定timout:-

Provider=Microsoft.Access.OLEDB.10.0;持久安全信息=False;资料 Source=MyServer;综合安全=SSPI;首字母 Catalog=MyDatabase;数据提供者=SQLOLEDB.1;连接超时=30


不确定你是否已经克服了这个问题,但我也有同样的问题。 我用记录集来做。打开SQL_字符串,连接

在此之前,我只是设置了timeout属性,不是在记录集或命令上,而是在连接对象上:

Connection.CommandTimeout = 0

解决方案

您还必须在上设置
commandTimeout
属性 正在使用的
ADODB.Command
ADODB.Recordset
。否则,这些对象 将使用默认的30秒时间限制,因为它们没有 从关联的
ADODB.Connection
实例继承时间限制

在ASP 3中使用VBScript的示例:

set con = createObject("ADODB.Connection")
con.open connectionString
con.commandTimeout = 60
set command = createObject("ADODB.Command")
command.activeConnection = con
command.commandType = adCmdText
command.commandText = sql
command.commandTimeout = 60
command.execute
response.write command.commandTimeout 'This is now 60 seconds.

看看这篇博文:@HK1,你会看到我将ADODB命令的命令超时设置为0(无限超时)。不知道为什么30秒的超时仍然存在,看起来很奇怪。如果调用“rs.opencmd”而不是“set rs=cmd.execute”将命令对象作为源传入,会发生什么情况。只是好奇你是否遇到了同样的问题?你的连接设置如何?当我使用ADO连接时,我总是使用我创建的显式连接,因此我不习惯使用CurrentProject.Connection。这是ADP吗?@HK1,是的,这是ADP(我不能改变)
set con = createObject("ADODB.Connection")
con.open connectionString
con.commandTimeout = 60
set command = createObject("ADODB.Command")
command.activeConnection = con
command.commandType = adCmdText
command.commandText = sql
command.commandTimeout = 60
command.execute
response.write command.commandTimeout 'This is now 60 seconds.