建立要求用戶輸入的查詢
如果需要查詢?cè)诿看芜\(yùn)行時(shí)都要求用戶輸入,那么可以創(chuàng)建參數(shù)查詢 (參數(shù)查詢:在這種查詢中,用戶以交互方式指定一個(gè)或多個(gè)條件值。參數(shù)查詢不是一個(gè)單獨(dú)種類的查詢,而是擴(kuò)展了查詢的靈活性。)。
還可以創(chuàng)建窗體來(lái)收集參數(shù)值。使用窗體可以:
✍ | 使用特定于數(shù)據(jù)類型的控件 |
✍ | 啟用參數(shù)值的持久性 |
✍ | 提供組合框控件(這樣您就可以從列表中選取值,而不是鍵入值) |
✍ | 使用窗體中可用的其他控件 |
注釋 不可使用窗體來(lái)收集 Web 數(shù)據(jù)庫(kù)中的查詢參數(shù)。
本文提供參數(shù)概述,說(shuō)明如何在查詢中使用參數(shù),以及如何使用窗體來(lái)增強(qiáng)參數(shù)的使用。
本文內(nèi)容
可以在 Access 的查詢中使用條件來(lái)限制查詢所返回的記錄集。請(qǐng)考慮以下情況。
假設(shè)您有一個(gè)名為“上一個(gè)訂單”的查詢,該查詢返回客戶的名稱和地址,以及該客戶最近訂單的發(fā)貨日期。最近,您向產(chǎn)品目錄和庫(kù)存中添加了一些令人興奮的新產(chǎn)品。您每次按訂單發(fā)貨時(shí),都會(huì)附上一份最新的目錄。您預(yù)期新產(chǎn)品將非常受歡迎,并希望確保所有的客戶都知道它們。您希望向尚未收到隨貨發(fā)運(yùn)的新目錄的所有客戶郵寄新目錄。
因此,您希望創(chuàng)建一個(gè)郵寄列表,在其中包含其最近的訂單發(fā)貨日期是在您制作新目錄之前的客戶的名稱和地址。為此,請(qǐng)向“上一個(gè)訂單”查詢的“發(fā)貨日期”字段應(yīng)用一個(gè)條件。該條件指定,“發(fā)貨日期”字段中的日期在開始分發(fā)新目錄的日期(例如,3/31/2006)之前。當(dāng)您運(yùn)行該查詢時(shí),將獲得一個(gè)郵寄列表,其中只包含尚未收到新目錄的客戶。
但是,如果這種情況再次出現(xiàn)該怎么辦?可以通過(guò)更改條件所指定的值來(lái)修改查詢的設(shè)計(jì),但是,如果查詢要求您輸入日期,并使用該日期來(lái)確定要包括在郵寄列表中的客戶,不是更好嗎?通過(guò)使用一種稱為“參數(shù)”的特殊條件,可以讓查詢完成上述操作。
您可能會(huì)發(fā)現(xiàn)參數(shù)查詢提供的對(duì)話框不足以滿足需要。在這種情況下,可以創(chuàng)建一個(gè)能夠更好地滿足參數(shù)收集需要的窗體。本文說(shuō)明如何創(chuàng)建用來(lái)收集報(bào)表參數(shù)的窗體。
本文假設(shè)您熟悉創(chuàng)建查詢的過(guò)程。繼續(xù)之前,您至少應(yīng)該熟悉如何創(chuàng)建選擇查詢。
有關(guān)如何創(chuàng)建選擇查詢的詳細(xì)信息,請(qǐng)參閱查詢簡(jiǎn)介一文。
本文舉例說(shuō)明如何在查詢中使用參數(shù),但是未提供關(guān)于如何指定條件的全面參考資料。
有關(guān)如何指定條件的詳細(xì)信息,請(qǐng)參閱查詢條件示例一文。
在查詢中使用參數(shù)與創(chuàng)建使用條件的查詢一樣簡(jiǎn)單??梢栽O(shè)計(jì)提示您輸入一段信息(如部件號(hào))的查詢,也可以設(shè)計(jì)提示您輸入多段信息(如兩個(gè)日期)的查詢。對(duì)于每個(gè)參數(shù),參數(shù)查詢都顯示一個(gè)單獨(dú)的對(duì)話框,提示您輸入該參數(shù)的值。
2. | 在要應(yīng)用參數(shù)的字段的“條件”行中,鍵入您希望該參數(shù)對(duì)話框顯示的文本,并用方括號(hào)括起來(lái),例如: |
[開始日期]
運(yùn)行該參數(shù)查詢時(shí),對(duì)話框中會(huì)顯示該提示(不帶方括號(hào))。
還可以在表達(dá)式中使用參數(shù)提示,例如:
Between [開始日期] And [結(jié)束日期]
注釋 對(duì)于每個(gè)參數(shù)提示,會(huì)出現(xiàn)單獨(dú)的對(duì)話框。在第二個(gè)示例中,將出現(xiàn)兩個(gè)對(duì)話框:一個(gè)對(duì)應(yīng)“開始日期”,另一個(gè)對(duì)應(yīng)“結(jié)束日期”。
3. | 對(duì)要添加參數(shù)的每個(gè)字段重復(fù)步驟 2。 |
可以使用上面的步驟將參數(shù)添加到以下類型的任一查詢:
✍ | 選擇查詢 |
✍ | 交叉表查詢 |
✍ | 追加查詢 |
✍ | 生成表查詢 |
✍ | 更新查詢 |
還可以將參數(shù)添加到聯(lián)合查詢。
1. | 在 SQL 視圖中打開聯(lián)合查詢。 |
2. | 添加一個(gè) WHERE 子句,其中包含要提示用戶輸入?yún)?shù)的每個(gè)字段。 |
如果已經(jīng)存在一個(gè) WHERE 子句,請(qǐng)檢查要使用參數(shù)提示的字段是否已在該子句中,如果沒(méi)有,則添加它們。
3. | 在 WHERE 子句中使用參數(shù)提示,而不是使用條件。 |
您可能希望查詢應(yīng)用參數(shù)的方式稍有不同。例如,您可能希望查詢接受文本字符串,并將該文本字符串與某個(gè)字段的任一部分進(jìn)行匹配。這可以通過(guò)將 Like 關(guān)鍵字與通配符結(jié)合使用來(lái)實(shí)現(xiàn)。例如,您可能希望查詢提示您輸入原產(chǎn)國(guó)/地區(qū),但是希望在相關(guān)字段值中包含參數(shù)字符串時(shí)進(jìn)行匹配。要執(zhí)行此操作:
1. | 創(chuàng)建一個(gè)選擇查詢,然后在“設(shè)計(jì)”視圖中打開該查詢。 |
2. | 在要應(yīng)用參數(shù)的字段的“條件”行中,鍵入 Like "*"&[,再鍵入要用作提示的文本,然后鍵入 ]&"*"。 |
當(dāng)您運(yùn)行該參數(shù)查詢時(shí),對(duì)話框中會(huì)顯示該提示(不帶中括號(hào),不帶 Like 關(guān)鍵字和通配符)。
3. | 當(dāng)參數(shù)查詢接受參數(shù)時(shí),會(huì)與包含參數(shù)字符串的值進(jìn)行匹配。例如,參數(shù)字符串 us 與參數(shù)字段值為 Australia 的行和值為 USA 的行匹配。 |
還可以使用 Like 關(guān)鍵字和通配符來(lái)指定參數(shù)應(yīng)當(dāng)與字段值的開頭或末尾匹配。若要與字段值的開頭匹配,請(qǐng)省略左方括號(hào)前面的引號(hào)、通配符和與號(hào) (&)。若要與字段值的末尾匹配,請(qǐng)省略右方括號(hào)后面的與號(hào) (&)、引號(hào)和通配符。
您可能希望收集一個(gè)參數(shù),但不希望查詢返回有匹配值的行,而希望查詢返回另外某個(gè)比較的結(jié)果為 True 的行。例如,您可能希望查詢提示輸入一個(gè)年份并返回年份值大于參數(shù)字符串的行。為此,請(qǐng)?jiān)谟脕?lái)將參數(shù)提示括起來(lái)的第一個(gè)方括號(hào)的左側(cè)鍵入一個(gè)比較運(yùn)算符,例如, >[年份:]。
您還可以指定參數(shù)應(yīng)該接受的數(shù)據(jù)類型??梢灾付ㄈ魏螀?shù)的數(shù)據(jù)類型,但尤其重要的是指定數(shù)值、貨幣或日期/時(shí)間數(shù)據(jù)的數(shù)據(jù)類型。在指定參數(shù)應(yīng)該接受的數(shù)據(jù)類型后,如果用戶輸入錯(cuò)誤類型的數(shù)據(jù)(例如,應(yīng)該輸入貨幣,但輸入了文本),則會(huì)看到更有幫助的錯(cuò)誤消息。
注釋 如果將參數(shù)配置為接受文本數(shù)據(jù),則輸入的任何內(nèi)容都將被解釋為文本,并且不會(huì)顯示任何錯(cuò)誤消息。
若要指定查詢中參數(shù)的數(shù)據(jù)類型,請(qǐng)按照下面的步驟執(zhí)行:
1. | 在設(shè)計(jì)視圖中打開查詢,在“設(shè)計(jì)”選項(xiàng)卡上的“顯示/隱藏”組中,單擊“參數(shù)”。 |
2. | 在“查詢參數(shù)”對(duì)話框中的“參數(shù)”列中,為您要為其指定數(shù)據(jù)類型的每個(gè)參數(shù)鍵入提示信息。請(qǐng)確保每個(gè)參數(shù)都與您在查詢?cè)O(shè)計(jì)網(wǎng)格的“條件”行中使用的提示信息相匹配。 |
3. | 在“數(shù)據(jù)類型”列中,選擇每個(gè)參數(shù)的數(shù)據(jù)類型。 |
注釋 不可使用窗體來(lái)收集 Web 數(shù)據(jù)庫(kù)中的查詢參數(shù)。
雖然參數(shù)查詢特有收集參數(shù)的內(nèi)置對(duì)話框,但它們只提供基本功能。使用窗體來(lái)收集參數(shù),可以獲得下面的功能:
✍ | 使用特定于數(shù)據(jù)類型的控件(如日期的日歷控件) |
✍ | 持久保留收集的參數(shù),這樣就可以在多個(gè)查詢中使用這些參數(shù)。 |
✍ | 提供用于收集參數(shù)的組合框或列表框,讓用戶從可用數(shù)據(jù)值的列表中選取值。 |
✍ | 提供用于執(zhí)行其他功能(如打開或刷新查詢)的控件。 |
按照下面的步驟創(chuàng)建收集參數(shù)的窗體。
步驟 2:創(chuàng)建模塊來(lái)檢查參數(shù)窗體是否已經(jīng)加載
1. | 在“創(chuàng)建”選項(xiàng)卡上的“窗體”組中,單擊“窗體設(shè)計(jì)”。 |
2. | 在“設(shè)計(jì)”視圖中,按 F4 顯示屬性表,然后如下表所示指定窗體屬性。 |
屬性 |
設(shè)置 |
標(biāo)題 |
輸入要出現(xiàn)在窗體標(biāo)題欄中的名稱。 |
默認(rèn)視圖 |
單個(gè)窗體 |
允許窗體視圖 |
是 |
允許數(shù)據(jù)表視圖 |
否 |
允許數(shù)據(jù)透視表視圖 |
否 |
允許數(shù)據(jù)透視圖視圖 |
否 |
滾動(dòng)條 |
兩者均無(wú) |
記錄選擇器 |
否 |
導(dǎo)航按鈕 |
否 |
邊框樣式 |
對(duì)話框 |
3. | 對(duì)于要窗體收集的每個(gè)參數(shù),在“設(shè)計(jì)”選項(xiàng)卡上的“控件”組中,單擊“文本框”按鈕。 |
4. | 如下表所示設(shè)置文本框?qū)傩浴?/span> |
屬性 |
設(shè)置 |
名稱 |
輸入描述參數(shù)的名稱,如“開始日期”。 |
格式 |
選擇一種反映參數(shù)字段的數(shù)據(jù)類型的格式。例如,為日期字段選擇常規(guī)日期。 |
5. | 保存該窗體并為其命名,如“日期范圍”。 |
1. | 在“創(chuàng)建”選項(xiàng)卡上的“宏和代碼”組中,單擊“模塊”。 |
新模塊隨即在 Visual Basic 編輯器中打開。
2. | 在 Visual Basic 編輯器中鍵入或粘貼下面的代碼: |
Function IsLoaded(ByVal strFormName As String) As Boolean
Dim oAccessObject As AccessObject
Set oAccessObject = CurrentProject.AllForms(strFormName)
If oAccessObject.IsLoaded Then
If oAccessObject.CurrentView <> acCurViewDesign Then
IsLoaded = True
End If
End If
End Function
3. | 保存模塊,然后關(guān)閉 Visual Basic 編輯器。 |
1. | 在“創(chuàng)建”選項(xiàng)卡上的“宏和代碼”組中,單擊“宏”。 |
2. | 在“設(shè)計(jì)”選項(xiàng)卡上的“顯示/隱藏”組中,單擊“顯示所有操作”。 |
3. | 右鍵單擊宏對(duì)象選項(xiàng)卡,然后單擊“保存”。 |
4. | 在“宏名稱”框中鍵入名稱,如打開對(duì)話框,然后單擊“確定”。 |
5. | 單擊“添加新操作”旁邊的下拉箭頭,然后單擊“OpenForm”。您將使用此操作打開先前創(chuàng)建的參數(shù)窗體。 |
“OpenForm”操作隨即出現(xiàn),并顯示一組參數(shù)。
6. | 如下表所示設(shè)置操作參數(shù)。 |
參數(shù) |
設(shè)置 |
窗體名稱 |
輸入賦予參數(shù)窗體的名稱。 |
視圖 |
窗體 |
數(shù)據(jù)模式 |
編輯 |
窗口模式 |
對(duì)話框 |
7. | 單擊“添加新操作”旁邊的下拉箭頭,然后單擊“If”。 |
8. | 在“If”操作中,在“If”旁邊的框中鍵入 Not IsLoaded,后跟您賦予報(bào)表參數(shù)窗體的名稱,名稱括在引號(hào)和括號(hào)內(nèi)。例如,如果窗體名為“日期范圍”,那么鍵入 Not IsLoaded("日期范圍")。 |
9. | 在“If”操作中,單擊“添加新操作”旁邊的下拉箭頭,然后單擊“CancelEvent”。 |
10. | 保存并關(guān)閉宏。 |
11. | 重復(fù)步驟 1 到 3 創(chuàng)建新宏。為新宏命名,如“關(guān)閉對(duì)話框”。 |
12. | 單擊“添加新操作”旁邊的下拉箭頭,然后單擊“CloseWindow”。此操作將由查詢用來(lái)關(guān)閉參數(shù)窗體。 |
13. | 如下表所示設(shè)置操作參數(shù)。 |
參數(shù) |
設(shè)置 |
對(duì)象類型 |
窗體 |
對(duì)象名稱 |
輸入賦予參數(shù)窗體的名稱。 |
保存 |
否 |
14. | 保存并關(guān)閉宏。 |
15. | 重復(fù)步驟 1 到 3 創(chuàng)建另一個(gè)新宏。為新宏命名,如“確定”。 |
16. | 單擊“添加新操作”旁邊的下拉箭頭,然后單擊“SetValue”。此操作將用來(lái)在用戶單擊“確定”時(shí),隱藏報(bào)表參數(shù)窗體。 |
17. | 如下表所示設(shè)置操作參數(shù)。 |
參數(shù) |
設(shè)置 |
項(xiàng)目 |
[可見] |
表達(dá)式 |
否 |
18. | 重復(fù)步驟 1 到 3 創(chuàng)建另一個(gè)新宏。為新宏命名,如“取消”。 |
19. | 單擊“添加新操作”旁邊的下拉箭頭,然后單擊“CloseWindow”。此操作將用來(lái)在用戶單擊“取消”時(shí),關(guān)閉參數(shù)窗體。 |
20. | 如下表所示設(shè)置操作參數(shù)。 |
參數(shù) |
設(shè)置 |
對(duì)象類型 |
窗體 |
對(duì)象名稱 |
輸入賦予參數(shù)窗體的名稱。 |
保存 |
否 |
1. | 從“設(shè)計(jì)”視圖中重新打開參數(shù)窗體。 |
2. | 確保在“設(shè)計(jì)”選項(xiàng)卡上的“控件”組中,未選中“使用控件向?qū)А?/span>。 |
3. | 在“設(shè)計(jì)”選項(xiàng)卡上的“控件”組中,單擊“按鈕”。 |
4. | 將指針?lè)旁诖绑w上的文本框下面,然后拖動(dòng)鼠標(biāo)創(chuàng)建“確定”命令按鈕。 |
5. | 如果屬性表不可見,請(qǐng)按 F4 顯示該表。 |
6. | 如下表所示設(shè)置“確定”按鈕的屬性。 |
屬性 |
設(shè)置 |
名稱 |
確定 |
標(biāo)題 |
確定 |
默認(rèn) |
是 |
OnClick |
輸入宏的名稱,例如,“日期范圍.確定”。 |
7. | 創(chuàng)建一個(gè)“取消”命令按鈕并如下表所示設(shè)置其屬性。 |
屬性 |
設(shè)置 |
名稱 |
取消 |
標(biāo)題 |
取消 |
OnClick |
輸入宏的名稱,例如,“日期范圍.取消”。 |
8. | 保存并關(guān)閉窗體。 |
1. | 在“設(shè)計(jì)”視圖中打開查詢。 |
2. | 輸入數(shù)據(jù)的條件。使用 Forms 對(duì)象、窗體名稱,以及控件 (控件:允許用戶控制程序的圖形用戶界面對(duì)象,如文本框、復(fù)選框、滾動(dòng)條或命令按鈕等??墒褂每丶@示數(shù)據(jù)或選項(xiàng)、執(zhí)行操作或使用戶界面更易閱讀。)的名稱: |
✍ | 例如,在 Access 數(shù)據(jù)庫(kù)(.accdb 或 .mdb)中,對(duì)于名為“日期范圍”的窗體,使用下面的表達(dá)式在查詢中引用名為“開始日期”和“結(jié)束日期”的控件: |
Between [Forms]![日期范圍]![開始日期] And [Forms]![日期范圍]![結(jié)束日期]