2010-05-19 102 views
4

我想要一個訪問參數查詢來詢問用戶的值(在這種情況下的位置)。當我在條件字段中輸入[Enter location]時,它工作正常:我得到一個帶有文本框和我的文本(輸入位置)的對話框(輸入參數值)。到現在爲止還挺好。這工作(結果也)。下拉在Access 2007參數查詢

但現在我想要一個下拉/組合框(而不是文本框)供用戶選擇一個位置。我製作了一個表格並在Criteria字段輸入Forms![Form1]![CmbLocation]

像這樣:http://office.microsoft.com/en-us/access/HA011170771033.aspx

但我仍然得到一個文本框(與基準爲爲textLabel)。

我在做什麼錯?有沒有人有任何建議?

回答

2

如果您刪除了參數形式您的查詢,然後重新鍵入上述表單exprsison到查詢生成器,然後它應該工作。

所以,在查詢生成器,在標準部分只需鍵入

[forms]![form1]![Combo4] 

請確保您有組合框的右側窗體名稱和控件名稱。

您不應該在查詢構建器中輸入任何其他內容。作爲提示,請刪除您之前在查詢生成器中提供的舊參數提示。

現在,打開窗體,選擇組合框,現在嘗試打開查詢,它應該打開沒有任何提示。請注意,此方法意味着必須打開表單,並且在嘗試啓動查詢之前組合框將被選定一個值。因此,如果您在此查詢上生成報表,請按下按鈕以與組合框相同的表單啓動報表。這樣可以確保表單在您嘗試啓動基於該查詢的查詢或報表之前將會打開。

+0

謝謝,在運行查詢之前打開表單會產生差異。但是我必須自己設計窗體,我真的是什麼,真正的什麼是標準的MS-Access「輸入參數值」對話框來顯示組合框而不是文本框。那可能嗎? – waanders 2010-05-20 10:49:56

+0

如果您翻轉問題,則可以完成此操作。該參數可能用於報告。因此,只需使用組合框啓動表單,然後讓表單啓動報表。例如:docmd.OpenReport「報告名稱」,acViewPreview ,,「some id =」&me.MyComboBox 因此,從查詢中刪除參數要好得多,否則它將極大地控制您的生活。您無法使用該硬編碼參數在其他地方使用該查詢。從查詢中刪除所有參數極大地增加了靈活性,並允許您在代碼中提供任何參數,如上所示。 – 2010-05-20 14:16:44

+0

我不喜歡硬連線打開單個報表的表單,但很容易從其他位置打開表單作爲對話框,並收集打開報表所需的條件。通過這種方式,表單不需要知道任何關於從何處調用或使用其標準的地方。 – 2010-05-20 23:19:49

3

除了Albert的建議之外,您可能還希望在查詢本身中完成這項工作,以便它「bootstrappable。」要做到這一點,你必須編寫函數來返回表單上組合框中選擇的值。這將是這樣的:

Public Function ReturnMyCriterion() As Variant 
    DoCmd.OpenForm "dlgGetCriterion", , , , , acDialog 
    With Forms!dlgGetCriterion 
     If .Tag <> "Cancel" Then 
     ReturnMyCriterion = Nz(!cmbMyCombo, "*") 
     End If 
    Else 
     ReturnMyCriterion = "*" 
    End With 
    Close acForm, "dlgGetCriterion" 
    End Function 

(打開與acDialog開關表單時,代碼暫停只要形式爲開放或可見;來獲取值從組合框,你必須將窗體的.Visible屬性設置爲False,你可以在組合框的AfterUpdate事件中或OK按鈕中執行此操作,還需要一個Cancel按鈕,它將窗體的.Tag屬性設置爲「Cancel」,然後設置表單的.Visible屬性爲False;這是使用Access中對話框表單的相對標準方法)。

你會那麼做在您的查詢的標準是:

Like ReturnMyCriterion() 

也就是說,假設你想如果沒有值在組合框中選擇返回所有記錄。

+0

我在哪裏放置ReturnMyCriterion代碼? – waanders 2010-05-20 09:21:46

+0

你把你想要替換的參數放在同一個地方。 – 2010-05-20 23:18:37

+0

David>謝謝! – waanders 2010-05-25 10:08:39