2011-01-08 66 views
0

我有兩個非常複雜的查詢顯示在同一個窗體上,並使用該窗體提供的多個參數。我想在VBA函數和/或其他表單中重用查詢。因此,我有兩個問題:MS Access:查詢重複使用/提供查詢參數使用VBA

  1. 是否有寫的SQL語句使得查詢動態確定,從而讀取其參數不必指定形式的名稱形式的方法嗎?例如,沿着我的一行!startDate,而不是Forms!myForm!startDate。

  2. 當打開DAO RecordSet時,有沒有辦法給查詢提供參數?

+1

是,是............. – 2011-01-08 00:30:38

+1

哈哈!儘管我只是提出了是或不是的問題,但我確實希望得到的不僅僅是一個答案。 :) – Adam 2011-01-08 00:36:23

回答

3

在大多數情況下,李連杰(訪問)是不是受到相同的注入問題,其他數據庫的經驗,所以它可能適合使用VBA編寫SQL,要麼更新爲新的SQL查詢,或設置表單的記錄來源。

大致來說:

sSQL = "SELECT f1, f2 FROM tbl WHERE f3 = '" & Me.txt3 & "'" 

CurrentDB.QueryDefs("aquery").SQL = sSQL 

或者,你可以使用參數:

查詢:

PARAMETERS txtCompany Text(150); 

SELECT <...> 
WHERE Company = txtCompany 

代碼:

Set qdf = db.QueryDefs("QueryName") 

qdf.Parameters!txtCompany = Trim(frm!txtCompany) 
3

我幾乎從來沒有定義參數或存儲對f的引用orm/report控件保存在QueryDefs中。對我而言,應該在運行時使用保存的QueryDef來提供這些內容。

通常,我在代碼中編寫我的SQL,而不是使用保存的QueryDefs。

另外,請記住,您可以在其OnOpen事件中設置表單的記錄源,這意味着您可以使用那裏的條件來決定您想要爲特定目的進行的過濾。這可以根據外部窗體或使用DoCmd.OpenForm的OpenArgs參數來確定。