VBA中的超时过期错误?

Posted

技术标签:

【中文标题】VBA中的超时过期错误?【英文标题】:Timeout expired error in VBA? 【发布时间】:2018-02-15 21:09:35 【问题描述】:

运行一段时间后,以下查询显示“超时已过期错误”。我什至设置了“cmd.CommandTimeout = 3600”,但是运行 1 分钟后我得到了“超时过期错误”

Sub ConnectSqlServer()

        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sConnString As String
        Dim cmd As New ADODB.Command
        ' Create the connection string.
        sConnString = "Provider=SQLOLEDB;Data Source=server1;" & _
                      "Initial Catalog=database1;" & _
                      "Integrated Security=SSPI;"


         cmd.ActiveConnection = conn
        ' Create the Connection and Recordset objects.
        Set conn = New ADODB.Connection
        Set rs = New ADODB.Recordset

        cmd.CommandTimeout = 3600
        ' Open the connection and execute.
        conn.Open sConnString
        Set rs = conn.Execute("select column1, column2 from table1;")

        ' Check we have data.
        If Not rs.EOF Then
            ' Transfer result.
            Sheets(1).Range("A8").CopyFromRecordset rs
        ' Close the recordset
            rs.Close
        Else
            MsgBox "Error: No records returned.", vbCritical

        End If

        End Sub

请告诉我需要更改代码以使其长时间运行并显示结果。

【问题讨论】:

超时 = 0 会发生什么? 不知你是否需要设置连接超时而不是命令。 它是 Connection.CommandTimeout = 0 在这里查看答案***.com/questions/17574524/adodb-query-timeout 不是在连接上设置的,而是在命令cmd.CommandTimeout = 3600上设置的。此外,命令超时的默认值为 30,因此如果它在超时前 60 秒(不确定您是否真的计时),那么有些东西是关闭的。 【参考方案1】:

所以答案是两个部分。

如 cmets 中所述,将其设置在 Connection 对象上

为了有更长的时间,将此设置为 0。起初似乎有点反直觉。

Connection.CommandTimeout = 0 

我之前运行过的查询也遇到过这种情况。

这里也有讨论:

ADODB query timeout

【讨论】:

如果您不介意,您可以编辑我的代码并告诉我如何编辑代码吗?只是为了更清晰的想法。 put conn.CommandTimeOut = 0 开启连接前设置,

以上是关于VBA中的超时过期错误?的主要内容,如果未能解决你的问题,请参考以下文章

VBA如何捕获请求超时错误?

在 SQL Server 2008 中执行视图时出现“超时已过期”错误

MS Access 给出 SQL Server 错误“登录超时已过期”,然后连接成功

我正在将 348k 行数据从 Excel 导入到 VB.net SQL。我得到这个错误:超时已过期

AWS RDS到PgAdmin错误保存属性无法连接到服务器:超时已过期[关闭]

SqlException:超时已过期