2014-03-31 19 views
1

在Access 2010中,我有一個帶有子窗體的窗體。通過VBA我創建一個SQL查詢,並設置窗體運行查詢的記錄源和顯示結果:訪問VBA:如何在設置記錄源時更改查詢超時

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分鐘。我試圖通過更改記錄源屬性之前設置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 

我怎樣才能改變時,我設置窗體的記錄源屬性時運行的SQL查詢超時?


更新:解決:有一種方法來設置查詢的ODBC連接(我使用ODBC連接到Oracle)的超時時間。我分配給RecordSource的SQL sencen不使用鏈接表,它們使用Access查詢對象。我的意思是,SQL語句不像「select * from my_linked_oracle_table ...」,它們更像是「select * from my_access_query_object ...」。所以,我可以設置超時對應於Access查詢對象,在這種方式的QueryDef:

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

該組2鍾如超時我的SQL查詢中使用Access查詢對象。

所以現在我設置了超時,然後更改子窗體的記錄源屬性:

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

回答