访问VBA:如何在设置RecordSource时更改查询超时

问题描述 投票:2回答:2

在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。

如果我尝试在立即面板中更改超时,则无效:

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

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


更新:已解决:有一种方法可以设置ODBC连接上的查询超时(我使用ODBC连接到Oracle)。我分配给RecordSource的SQL sencentes不使用链接表,它们使用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
vba ms-access timeout ms-access-2010
2个回答
1
投票

有一种方法可以为ODBC连接上的查询设置超时(我使用ODBC连接到Oracle)。我分配给RecordSource的SQL sencentes不使用链接表,它们使用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

© www.soinside.com 2019 - 2024. All rights reserved.