在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
我解決了它與QueryDef的ODBCTimeout屬性(請參閱問題的「更新」部分)。 – freesoft