【问题标题】:Access VBA: How to change the query timeout when setting RecordSourceAccess VBA:设置RecordSource时如何更改查询超时
【发布时间】:2014-03-31 13:35:57
【问题描述】:

在 Access 2010 中,我有一个带有子表单的表单。通过 VBA,我创建了一个 SQL 查询并设置了子窗体的 RecordSource 以运行查询并显示结果:

Forms("<main form>")("<subform>").Form.RecordSource = my_sql_sentence

有时,查询会产生超时错误,所以我检测到它:

On Error Resume Next
Forms("<main form>")("<subform>").Form.RecordSource = my_sql_sentence
If Err <> 0 Then
    MsgBox "Error! (probably timeout): " & Err.Description
End If
On Error GoTo 0

超时似乎约为 1 分钟。我试图通过在更改 RecordSource 属性之前设置 CurrentDB 对象的 QueryTimeout 属性来更改超时时间:

CurrentDb.QueryTimeout = 2
On Error Resume Next
Forms("<main form>")("<subform>").Form.RecordSource = my_sql_sentence
If Err <> 0 Then
...

但是不行,超时还是60。

如果我尝试在 Inmediate 面板中更改超时,它没有效果:

? CurrentDB.QueryTimeout
 60 
CurrentDB.QueryTimeout = 2
? CurrentDB.QueryTimeout
 60 

如何更改设置表单的 RecordSource 属性时运行的 SQL 查询的超时时间?


更新:已解决:有一种方法可以设置 ODBC 连接查询的超时时间(我使用 ODBC 连接到 Oracle)。我分配给 RecordSource 的 SQL 句子不使用链接表,它们使用 Access 查询对象。我的意思是 SQL 语句不像“select * from my_linked_oracle_table ...”,它们更像是“select * from my_access_query_object ...”。所以我可以为Access查询对象对应的QueryDef设置超时时间,这样:

CurrentDb.QueryDefs("<my_access_query_object>").ODBCTimeout = 120

将我的 SQL 查询使用的 Access 查询对象的超时设置为 2 分钟。

所以现在我设置了超时,然后更改了子表单的 RecordSource 属性:

CurrentDb.QueryDefs("<my_access_query_object>").ODBCTimeout = 120
Forms("<main form>")("<subform>").Form.RecordSource = my_sql_sentence

【问题讨论】:

  • +1 表示更新,这是一个有用的解决方案。添加为社区 Wiki,因为此用户显然在 SO 中不活跃。

标签: vba ms-access timeout ms-access-2010


【解决方案1】:

有一种方法可以设置 ODBC 连接查询的超时时间(我使用 ODBC 连接到 Oracle)。我分配给 RecordSource 的 SQL 句子不使用链接表,它们使用 Access 查询对象。我的意思是 SQL 语句不像“select * from my_linked_oracle_table ...”,它们更像是“select * from my_access_query_object ...”。所以我可以为Access查询对象对应的QueryDef设置超时时间,这样:

CurrentDb.QueryDefs("<my_access_query_object>").ODBCTimeout = 120

将我的 SQL 查询使用的 Access 查询对象的超时设置为 2 分钟。

所以现在我设置了超时,然后更改了子表单的 RecordSource 属性:

CurrentDb.QueryDefs("<my_access_query_object>").ODBCTimeout = 120
Forms("<main form>")("<subform>").Form.RecordSource = my_sql_sentence

【讨论】:

    【解决方案2】:

    【讨论】:

    • 我用 QueryDef 的 ODBCTimeout 属性解决了这个问题(请参阅问题的“更新”部分)。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 2013-04-18
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多