創(chuàng)建表達式
本文介紹如何在 Microsoft Office Access 中創(chuàng)建和使用表達式??梢允褂帽磉_式來執(zhí)行許多在 Microsoft Office Excel 中使用公式執(zhí)行的相同任務(wù)。本文向您介紹如何根據(jù)要執(zhí)行的任務(wù)來使用表達式。
本文內(nèi)容
表達式是以下全部或部分的組合:內(nèi)置的或用戶定義的函數(shù)、標識符、運算符和常量。每個表達式的計算結(jié)果均為單個值。
例如,以下表達式包含全部四種元素:
=Sum([購買價格])*0.08
在此示例中,Sum() 是內(nèi)置函數(shù),[購買價格] 是標識符,* 是數(shù)學運算符,0.08 是常量。此表達式可在窗體頁腳或報表頁腳中的文本框中用于計算一組項目的營業(yè)稅。
表達式可能會比此示例復雜得多或簡單得多。例如,以下布爾表達式(計算結(jié)果為 True 或 False 的表達式)只包括運算符和常量:
>0
此表達式在與大于 0 的數(shù)字進行比較時返回 True,在與小于 0 的數(shù)字進行比較時返回 False。您可以在控件或表字段的“有效性規(guī)則”屬性中使用此表達式,以確保只輸入正值。
在 Access 中,表達式在很多地方用于執(zhí)行計算、操作字符或測試數(shù)據(jù)。表、查詢、窗體、報表和宏都具有接受表達式的屬性。例如,可以在控件的“控件來源”和“默認值”屬性中使用表達式,還可以在表字段的“有效性規(guī)則”屬性中使用表達式。此外,在為事件過程或模塊編寫 Microsoft Visual Basic for Applications (VBA) 代碼時,使用的表達式通常與在 Access 對象(如表或查詢)中使用的表達式類似。
下面幾節(jié)介紹表達式的最常見使用方法:
在 Access 2010 中,重新設(shè)計了表達式生成器以便更加易于使用。下面是您在此版本中會注意到的一些更改:
✍ | 智能感知 智能感知功能已添加到您可以輸入表達式的幾乎所有上下文。這意味著,在您開始鍵入標識符或函數(shù)時,Access 會顯示適合您所在的上下文的可用標識符和函數(shù)的列表。您可以繼續(xù)鍵入以調(diào)整該列表,或選擇一項來填寫它。這大大加快了鍵入表達式的過程,并幫助確保您創(chuàng)建的表達式的準確性。 |
在您使用新的 Web 發(fā)布功能構(gòu)建 Web 數(shù)據(jù)庫時,智能感知尤其有用。只有某些函數(shù)與 Web 數(shù)據(jù)庫兼容,智能感知可防止您使用不兼容的函數(shù)。
有關(guān) Web 數(shù)據(jù)庫的詳細信息,請參閱文章生成可在 WEB 上共享的數(shù)據(jù)庫。
✍ | 快速提示 在智能感知顯示標識符和函數(shù)的列表時,您可以單擊此列表中的每一項來查看該項的簡短說明。 |
✍ | 快速信息 在表達式生成器中鍵入完整函數(shù)名稱時,Access 會立即彈出一個小框,其中顯示表達式的語法。這可幫助您記起函數(shù)需要哪些參數(shù)(如果有)以及采用什么順序。在表達式框中鍵入每個參數(shù)時,Access 會在快速信息顯示中加粗它,以便您始終知道您在參數(shù)列表中的位置。 |
注釋 這些功能也可在您可以鍵入表達式的大多數(shù)上下文中使用,即使您不使用“表達式生成器”對話框也是如此。
除了這些新功能外,還重新設(shè)計了“表達式生成器”對話框本身:
✍ | 可以單擊“<< 更少”或“更多 >>”來控制顯示“表達式生成器”對話框的范圍。 |
✍ | 在調(diào)整“表達式生成器”對話框的大小后,新大小會在您的 Access 會話期間保留,從而使您不必每次打開該對話框時都要調(diào)整大小。 |
✍ | 刪除了運算符按鈕行,從而使對話框更加整潔。 |
使用表達式作為控件的數(shù)據(jù)源時,您所創(chuàng)建的控件就是計算控件。例如,假定您有一個報表顯示了多個庫存記錄,您要在報表頁腳中創(chuàng)建一個總計來對報表上的所有行項目求和。
若要計算總計,請在報表頁腳中放置一個文本框控件,然后將該文本框的 ControlSource 屬性設(shè)置為以下表達式:
=Sum([table_field])
在本例中,table_field 是包含小計值的字段的名稱。該字段可以駐留在表或查詢中。Sum 函數(shù)計算記錄源中一組值的總計。
以下過程說明如何在文本框控件中輸入表達式。
1. | 在導航窗格中,右鍵單擊要更改的窗體,然后單擊快捷菜單上的“布局視圖”或“設(shè)計視圖”。 |
2. | 選擇要向其中輸入表達式的控件。 |
3. | 如果屬性表尚未顯示,請按 F4 來顯示它。 |
4. | 若要手動創(chuàng)建表達式,請在屬性表中的“數(shù)據(jù)”選項卡上,單擊文本框的 ControlSource 屬性,然后鍵入 =,后跟表達式的其余部分。例如,若要計算如上所示的小計,請鍵入 =Sum([table_field]),務(wù)必以您字段的名稱替換 table_field。 |
5. | 若要使用表達式生成器創(chuàng)建表達式,請單擊屬性框中的“生成”按鈕 。 |
完成表達式后,屬性表將與下圖類似:
可以使用表達式來定義查詢中的條件。然后 Access 將只返回與條件匹配的那些行。例如,假定您要查看其發(fā)貨日期在 2010 年的前三個月的所有訂單。若要輸入條件,請在查詢的“日期/時間”列的“條件”單元格中鍵入以下表達式。此示例使用名為 ShippedDate 的“日期/時間”列。若要定義日期范圍,請按以下方式輸入條件:
Between #1/1/2010# And #3/31/2010#
ShippedDate 列將與下圖類似。
對于訂單表中的每個記錄,如果 ShippedDate 列中的值在您指定的日期范圍內(nèi),則查詢輸出中將包括該記錄。請注意,在表達式中用井號 (#) 將日期括起來。Access 將井號內(nèi)的值視為“日期/時間”數(shù)據(jù)類型。通過將這些值視為日期/時間數(shù)據(jù),您可以對它們執(zhí)行計算,例如從一個日期減去另一個日期。
1. | 在導航窗格中,右鍵單擊要更改的查詢,然后單擊快捷菜單上的“設(shè)計視圖”。 |
2. | 在要輸入條件的列的“條件”單元格中單擊。 |
3. | 若要手動創(chuàng)建表達式,請鍵入條件表達式。 |
注釋 不要在條件表達式的前面加上 = 運算符。
4. | 若要使用表達式生成器創(chuàng)建表達式,請在“設(shè)計”選項卡上的“查詢設(shè)置”組中,單擊“生成器” 。 |
提示 若要在較大的區(qū)域中編輯表達式,請將光標放在“條件”單元格中,然后按 Shift+F2 來顯示“縮放”框:
假定您在設(shè)計一個查詢,希望顯示涉及查詢中其他字段的計算的結(jié)果。若要創(chuàng)建計算字段,請在查詢的“字段”行的空白單元格中輸入表達式。例如,如果您的查詢包含“數(shù)量”字段和“單價”字段,可以通過在查詢的“字段”行中輸入以下表達式將兩個字段相乘來創(chuàng)建計算字段“總價”。
總價: [數(shù)量] * [單價]
使表達式以文本 Extended Price: 開頭可將新列命名為 Extended Price。此名稱通常稱為別名。如果您沒有提供別名,Access 會創(chuàng)建一個,例如 Expr1。
在運行查詢時,Access 會對每行執(zhí)行計算,如下圖所示:
1. | 在導航窗格中,右鍵單擊要更改的查詢,然后單擊快捷菜單上的“設(shè)計視圖”。 |
2. | 單擊要在其中創(chuàng)建計算字段的列中的“字段”單元格。 |
3. | 若要手動創(chuàng)建表達式,請鍵入表達式。 |
注釋 請不要在條件表達式前面加上 = 運算符,而要使表達式以描述性標簽開頭,后跟一個冒號。例如,鍵入 Extended Price: 會為創(chuàng)建名為 Extended Price 的計算字段的表達式提供標簽。然后,在冒號后面為表達式輸入條件。
4. | 若要使用表達式生成器創(chuàng)建表達式,請在“設(shè)計”選項卡上的“查詢設(shè)置”組中,單擊“生成器”。 |
在 Access 2010 中,可以在表中創(chuàng)建計算字段,而無需另外使用查詢來執(zhí)行計算。
注釋
✍ | 計算不能包括其他表或查詢中的字段。 |
✍ | 計算結(jié)果是只讀的。 |
若要創(chuàng)建計算字段,請執(zhí)行下列操作:
1. | 通過在導航窗格中雙擊表來打開它。 |
2. | 水平滾動到表中最右邊的一列,然后單擊“單擊以添加”列標題。 |
3. | 在出現(xiàn)的列表中,單擊“計算字段”,然后單擊結(jié)果所需的數(shù)據(jù)類型。 |
Access 會顯示表達式生成器。
4. | 開始鍵入此字段所需的計算,例如: |
[數(shù)量] * [單價]
注釋 沒有必要在表達式前面加等號 (=)。
5. | 單擊“確定”。 |
Access 會添加計算字段,然后突出顯示字段標題,以便您可以鍵入字段名稱。
6. | 為計算字段鍵入名稱,然后按 Enter。 |
表達式非常適用于在向數(shù)據(jù)庫中輸入數(shù)據(jù)時對數(shù)據(jù)進行驗證。在表中,可以創(chuàng)建兩種驗證:字段驗證規(guī)則和記錄驗證規(guī)則,前者可防止用戶在單個字段中輸入無效數(shù)據(jù),后者可防止用戶創(chuàng)建不滿足所輸入的條件的記錄。這兩種驗證規(guī)則都是使用表達式創(chuàng)建的。
例如,假定您有一個名為“庫存”的表,其中包含一個名為“存貨數(shù)量”的字段,而且您希望設(shè)置一個規(guī)則來強制用戶輸入大于或等于零的值。換句話說,庫存決不可為負數(shù)。您可以在“存貨數(shù)量”字段中使用以下表達式作為字段驗證規(guī)則來實現(xiàn)此目的:
>=0
使用以下過程來輸入字段驗證規(guī)則或記錄驗證規(guī)則:
1. | 在導航窗格中,雙擊要更改的表。 |
Access 將在數(shù)據(jù)表視圖中打開該表。
2. | 對于字段驗證規(guī)則,選擇要更改的字段。 |
3. | 在“字段”選項卡上的“字段驗證”組中,單擊“驗證”,然后單擊“字段驗證規(guī)則”或“記錄驗證規(guī)則”。 |
Access 會顯示表達式生成器。
4. | 開始鍵入所需的條件。例如,對于要求所有值都大于或等于零的字段驗證規(guī)則,請鍵入以下內(nèi)容: |
>=0
注釋 不要在表達式前面加上等號 (=)。
驗證規(guī)則表達式是布爾表達式,這意味著它們的計算結(jié)果為 True 或 False。驗證規(guī)則的計算結(jié)果必須為 True 才能接受該值。在此示例中,如果您為“存貨數(shù)量”字段輸入小于零的值,則表達式的計算結(jié)果將為 False,Access 不會接受該值。如果尚未按下節(jié)所述輸入驗證消息,則 Access 會顯示自己的消息來指示該字段的驗證規(guī)則禁止您輸入的值。
為使您的數(shù)據(jù)庫更加便于使用,可以輸入自定義驗證消息。它們會替代 Access 在數(shù)據(jù)與驗證規(guī)則不匹配時顯示的常規(guī)消息??梢允褂米远x驗證消息來提供有助于用戶輸入正確數(shù)據(jù)的特定信息,例如“‘存貨數(shù)量’值不能為負數(shù)”。使用以下過程來創(chuàng)建驗證消息:
1. | 在導航窗格中,雙擊要更改的表。 |
Access 將在數(shù)據(jù)表視圖中打開該表。
2. | 對于字段驗證消息,選擇向其添加了驗證規(guī)則的字段。 |
3. | 在“字段”選項卡上的“字段驗證”組中,單擊“驗證”,然后單擊“字段驗證消息”或“記錄驗證消息”。 |
4. | 在“輸入驗證消息”對話框中,鍵入您希望在數(shù)據(jù)與驗證規(guī)則不匹配時顯示的消息,然后單擊“確定”。 |
注釋 驗證規(guī)則不適用于 Web 數(shù)據(jù)庫中的控件。改用字段或記錄驗證規(guī)則,如上一節(jié)中所述。
除了表字段和記錄外,控件也可以具有可接受表達式的“有效性規(guī)則”屬性。例如,假定您使用窗體輸入報表的日期范圍,并希望確保開始日期不早于 2010 年 1 月 1 日。您可以對在其中輸入開始日期的文本框的“有效性規(guī)則”和“驗證文本”屬性進行如下設(shè)置:
屬性 |
設(shè)置 |
有效性規(guī)則 |
>=#1/1/2010# |
驗證文本 |
不能輸入早于 2010 年 1 月 1 日的日期。 |
如果嘗試輸入早于 2010 年 1 月 1 日的日期,將出現(xiàn)一條消息,顯示“驗證文本”屬性中的文本。如果沒有在“驗證文本”屬性框中輸入任何文本,則 Access 會顯示常規(guī)消息。單擊“確定”后,Access 將返回到文本框。
提示 為表字段設(shè)置驗證規(guī)則會在整個數(shù)據(jù)庫中執(zhí)行該規(guī)則,而無論在哪里修改該字段。而為窗體上的控件設(shè)置驗證規(guī)則只會在使用該窗體時才會執(zhí)行該規(guī)則。如果希望為不同用戶建立不同的驗證規(guī)則,為表字段和窗體上的控件分別設(shè)置驗證規(guī)則會很有用。
1. | 在導航窗格中,右鍵單擊要更改的窗體或報表,然后單擊快捷菜單上的“設(shè)計視圖”或“布局視圖”。 |
2. | 右鍵單擊要更改的控件,然后單擊快捷菜單上的“屬性”。 |
Access 將顯示控件的屬性表。
3. | 單擊“全部”選項卡,然后單擊“有效性規(guī)則”屬性框。 |
4. | 鍵入表達式,或單擊屬性框中的“生成”按鈕 ,以使用表達式生成器創(chuàng)建表達式。 |
注釋 不要在表達式的前面加上 = 運算符。
5. | 若要自定義在用戶輸入的數(shù)據(jù)與驗證規(guī)則不匹配時顯示的文本,請在“驗證文本”屬性中鍵入所需文本。 |
可以使用表達式來為表中字段指定默認值。例如,假定您希望在添加新記錄時自動將日期和時間插入到名為“訂單日期”的字段中。為此,您可以使用下面的表達式:
Now()
1. | 在導航窗格中,雙擊要更改的表。 |
Access 將在數(shù)據(jù)表視圖中打開該表。
2. | 選擇要更改的字段。 |
3. | 在“字段”選項卡上的“屬性”組中,單擊“默認值”。 |
Access 會顯示“表達式生成器”對話框。
4. | 在框中鍵入您的表達式,確保表達式以等號 (=) 開頭。 |
注釋 如果將控件綁定到表字段,并且控件和表字段都具有默認值,則控件的默認值優(yōu)先于表字段的默認值。
使用表達式的另一個常見位置是控件的“默認值”屬性??丶摹澳J值”屬性的行為與表中字段的“默認值”屬性的行為類似。例如,若要將當前日期用作文本框的默認值,可以使用下面的表達式:
Date()
此表達式使用 Date 函數(shù)返回當前日期,而不是返回時間。如果將文本框綁定到了表字段,并且該字段具有默認值,則控件的默認值優(yōu)先于表字段的默認值。通常最好為表中字段設(shè)置“默認值”屬性。這樣,如果您使幾個來自不同窗體的控件基于相同的表字段,則會對每個控件應(yīng)用相同的默認值,從而幫助確保每個窗體上的數(shù)據(jù)輸入一致。
1. | 在導航窗格中,右鍵單擊要更改的窗體或報表,然后單擊快捷菜單上的“設(shè)計視圖”或“布局視圖”。 |
2. | 選擇要更改的控件。 |
3. | 如果屬性表尚未顯示,請按 F4 來顯示它。 |
4. | 單擊屬性表上的“全部”選項卡,然后單擊“默認值”屬性框。 |
5. | 鍵入表達式,或單擊屬性框中的“生成”按鈕 ,以使用表達式生成器創(chuàng)建表達式。 |
在某些情況下,您可能希望僅當特定條件為 True 時才執(zhí)行宏內(nèi)的一個操作或一系列操作。例如,假定您希望僅當文本框中的值大于或等于 10 時才運行宏操作。若要設(shè)置此規(guī)則,請在宏內(nèi)的 If 塊中使用表達式來定義宏內(nèi)的條件。
在此示例中,假定文本框名為“項目”。設(shè)置條件的表達式為 [項目]>=10。
1. | 在導航窗格中,右鍵單擊要更改的宏,然后單擊快捷菜單上的“設(shè)計視圖”。 |
2. | 單擊要修改的 If 塊,或從“操作目錄”窗格中添加 If 塊。 |
3. | 單擊 If 塊的第一行。 |
4. | 在框中鍵入條件表達式,或單擊表達式框旁邊的“生成”按鈕 來啟動表達式生成器。 |
注釋 鍵入的表達式必須是布爾表達式,即它的計算結(jié)果為 True 或 False。If 塊內(nèi)的宏操作只在條件計算結(jié)果為 True 時運行。
可以使用“分組、排序和匯總”窗格來為報表數(shù)據(jù)定義分組級別和排序順序。最常見的是,按照您從列表中選擇的字段進行分組或排序,但如果您希望按照計算值進行分組或排序,則可以輸入表達式。
分組是將包含重復值的列組合在一起的過程。例如,假定數(shù)據(jù)庫包含不同城市辦事處的銷售信息,并且數(shù)據(jù)庫中的一個報表名為“城市銷售額”。提供該報表數(shù)據(jù)的查詢按城市值對數(shù)據(jù)進行分組。這種類型的分組可以使信息更易于閱讀和理解。
而排序是將查詢結(jié)果中的行(記錄)按順序排列的過程。例如,您可以按其主鍵值(或另一個字段中的另一組值)的升序或降序?qū)τ涗涍M行排序,也可以按一個或多個字符的指定順序(例如字母順序)對記錄進行排序。
1. | 在導航窗格中,右鍵單擊要更改的報表,然后單擊快捷菜單上的“布局視圖”或“設(shè)計視圖”。 |
2. | 在“設(shè)計”選項卡上的“分組和匯總”組中,單擊“分組和排序”。 |
在報表下方會顯示“分組、排序和匯總”窗格。
3. | 若要向報表中添加分組級別,請單擊“添加組”。 |
4. | 若要向報表中添加排序順序,請單擊“添加排序”。 |
窗格中會顯示新組級別或排序順序,還會顯示提供報表數(shù)據(jù)的字段列表。下圖說明典型的新組級別(按類別分組)和排序順序(按制造商排序),以及包含可用于分組和排序的字段列表:
5. | 在可用字段列表下,單擊“表達式”來啟動表達式生成器。 |
6. | 在表達式生成器的表達式框(上部的框)中輸入要使用的表達式。表達式一定要以等號 (=) 運算符開頭。 |
1. | 在導航窗格中,右鍵單擊要更改的報表,然后單擊快捷菜單上的“布局視圖”或“設(shè)計視圖”。 |
2. | 單擊要更改的組級別或排序順序。 |
3. | 單擊“分組形式”(對于分組級別)或“排序依據(jù)”(對于排序順序)旁邊的向下箭頭。 |
將出現(xiàn)包含可用字段的列表。
4. | 在包含字段的列表的底部,單擊“表達式”以啟動表達式生成器。 |
5. | 在表達式生成器的表達式框(上部的框)中鍵入表達式。表達式一定要以等號 (=) 運算符開頭。 |