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

时间:2014-03-31 13:35:57

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

在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语句不像&#34; select * from my_linked_oracle_table ...&#34;,它们更像是&#34; select * from my_access_query_object ...&#34;。因此,我可以通过以下方式设置与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 个答案:

答案 0 :(得分:1)

有一种方法可以设置对ODBC连接的查询超时(我使用与Oracle的ODBC连接)。我分配给RecordSource的SQL语法不使用链接表,而是使用Access查询对象。我的意思是,SQL语句不像“从my_linked_oracle_table ...中选择*”,而更像是“从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 :(得分:0)