【发布时间】: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