天天看點

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

本節書摘來自異步社群出版社《access 2007開發指南(修訂版)》一書中的第2章,第2.5節,作者: 【美】alison balter,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

access 2007開發指南(修訂版)

在表中添加了字段之後,就應該自定義它們的屬性。可以使用字段屬性來控制資料的存儲方式,以及什麼樣的資料可以輸入到字段當中。根據所標明字段類型的不同,字段的屬性也會有所不同。“文本”字段類型的字段屬性清單具有一定的代表性(如圖2.8所示)。以下各節就專門讨論各個字段屬性。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

第1個屬性是字段大小,它隻适用于文本和數字字段。如前所述,應該使字段大小盡可能小。對數字字段來說,字段越小,對存儲空間的要求就越低,而操作處理速度則越快。

練習:使用以下字段及其相應的類型建立一個表。

companyid:自動編号。

companyname:文本。

state:文本。

phonenumber:文本。

contactdate:日期/時間。

creditlimit:貨币。

(1)為将state字段的“字段大小”屬性設為兩個字元,應該先單擊字段,然後在“字段大小”屬性中輸入“2”。

(2)切換到資料表視圖。這時系統會提示儲存表。将其命名為“tblcustomers”。如果沒有為上表指定主鍵,系統還會提示指定主鍵。當在state字段中輸入資料時,隻能輸入兩個字元。

注 意

這個例子及本章中的其他例子均可在下載下傳的示例代碼的chap2trlt.accdb檔案中找到。如果要驗證自己所建立表的結構是否正确,請參考這個檔案。

2.5.2 格式:決定資料的顯示方式

第2個屬性是格式,它适用于除ole對象字段和附件字段之外的所有字段。利用它可以指定access如何顯示資料。access允許從預定義的格式中進行選擇,或者使用自己建立的自定義格式。字段的資料類型不同,可選的格式也就不同。例如,在access當中,可以選擇不同的日期/時間格式,包括“短日期”(如07-7-7)、“長日期”(如2007年7月7日,星期六)、“短時間”(如7:17)和長時間(如7:17:11 am)。貨币字段的格式包括“貨币”(如¥1,767.25)、“固定”(如1767.25)和“标準”(如1,767.25)。

練習:将contactdate字段的格式屬性設定為正常日期。然後切換到資料表視圖,并且以不同的格式如07/04/07和2007年7月4日輸入日期。注意,不管以何種方式輸入日期,當将光标移離那個字段的時候,日期将以yy-mm-dd的格式把日期顯示為07-7-4。

注意

“短日期”和“長日期”格式是由“控制台”中“區域選項”控制的。

提示

access 2007支援多次“撤消”和“恢複”操作。可以在microsoft資料庫(mdb)表和查詢、accdb窗體、報表、資料通路頁面、宏,以及子產品的“設計視圖”中進行多次“撤消”和“恢複”操作。利用這個功能可以像在word或excel中操作文檔一樣,在“設計視圖”中向前一步或向後一步檢視改變的狀況。

利用快捷鍵“ctrl+>”、“ctrl+.(句号)”、“ctrl+<”和“ctrl+,(逗号)”可以友善地在不同表視圖間切換。“ctrl+>”和“ctrl+.”可以顯示下一張視圖。“ctrl+<”和“ctrl+,”可以顯示前一張視圖。

2.5.3 輸入掩碼:決定何種資料能進入字段

另一個重要的屬性是輸入掩碼屬性,它适用于文本、數字、日期/時間和貨币字段。格式屬性決定資料的顯示格式,而輸入掩碼屬性用來控制可以存儲在字段當中的資料。可以使用輸入掩碼屬性按字元來控制什麼類型的字元(如數字和字母數字等)可以存儲在字段當中,以及什麼樣的字元又是所要求的。圖2.9所示的是“輸入掩碼向導”對話框,它可以幫助建立在文本和日期字段中常用的輸入掩碼。為了通路“輸入掩碼向導”,應該單擊輸入掩碼字段右邊的按鈕。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

隻有在安裝的時候選擇了“附加向導”元件,輸入掩碼向導才可以使用。如果沒有,access會在使用者第一次使用它時提示安裝。

例如,輸入掩碼000-00-0000;;(當将光标移離這個屬性時,它就會轉換為000-00-0000;;)就可以控制輸入一個有效的社會保障号碼。分号前面的字元表達了實際上的掩碼。其中的0用于限制輸入的0~9位。當使用者輸入資料的時候,其中的破折号會在控件内顯示。在第1個和第2個分号之間輸入的字元決定了字母字元(這裡是指破折号)是否可以存儲在字段當中。如果在這個位置輸入一個“0”,那麼字母字元就存儲在字段當中;若是輸入一個“1”或者将其留為空白,那麼字母字元就不存儲。最後一個位置(即第2個分号之後)表示要顯示什麼樣的字元來說明使用者輸入的空格(這裡使用的是下劃線)。

這裡有一個更為清楚的例子:在掩碼 (999") "000-0000;;_當中,第1個斜杠使得跟在它後面(即括号中)的字元顯示為字母。3個9表示可以輸入數字或空格。兩個引号之間的括号顯示為字母。首先出現的3個0表示要求的值是0~9。第2個斜杠之後的破折号是顯示為字母。然後又要求另外的4個數字。由于兩個分号之間什麼也沒有,是以字母字元不存儲在字段當中。第2個分号之後跟了一個下劃線,是以用下劃線表示使用者接下來輸入的空格。

練習:使用“輸入掩碼向導”來為phonenumber字段添加一個掩碼,應該将這個字段設定為文本字段。以下是該過程的步驟。

(1)先單擊phonenumber字段中任意處,然後單擊“輸入掩碼”屬性。

(2)單擊“輸入掩碼”屬性右邊的省略号(在中文版中,沒有預設的電話号碼輸入掩碼,是以,可直接在輸入掩碼屬性中輸入需要的掩碼 (999") "000-0000,以代替(2)、(3)步,譯者注)。

(3)從一列可選的掩碼中選擇電話号碼,在向導詢問“您願意如何儲存該資料?”時,選擇不将字母字元存儲到字段當中。

(4)切換到資料表視圖,并輸入一個電話号碼。請注意光标是怎樣在字母字元之間移動的。然後試着讓地區代碼留為空白。access是允許使用者這樣操作。

(5)接下來,試着在某個位置輸入一個字母。access将阻止使用者這樣操作。

(6)然後,試着将7位電話号碼的某個字元留為空白。access也将阻止這種操作。

當使用了輸入掩碼後,使用者總是處在“改寫”模式。這是access的一個特點,使用者不能對其進行更改。

2.5.4 标題:節省時間

另一個屬性是标題屬性。這個屬性中的文本将成為字段在資料表視圖當中的标題。當把資料綁定控件添加給窗體和報表時,access會将它用作與資料綁定控件相關聯的附加标簽的标題。隻要命名字段時不使用空格,标題屬性都是非常重要的。在資料表視圖、窗體和報表當中,标題屬性将覆寫字段名。

術語“資料綁定控件”是指一個綁定到表或查詢中的字段的控件。術語“附加标簽”用于表示附加到資料綁定控件的标簽。

在建立使用某個字段的窗體和報表之前,應該事先設定字段的标題屬性。當一個窗體或報表建立完之後,access注重的是目前的标題。如果在以後對标題進行添加或修改,那麼現有窗體和報表上的字段标題不會得到修改。

2.5.5 預設值:節省資料輸入時間

另一個重要的屬性是“預設值”屬性,它用來表示當使用者在表中添加新的記錄時,access将在字段中置放何種預設值。預設值可以是文本,也可以是表達式,它可以為資料輸入人員節省大量時間。但是,它不能為字段中的輸入作任何有效性驗證。

預設值會自動反映到包含相應字段的窗體和報表當中。這與标題屬性是不一樣的,不管預設值是在窗體和報表的建立之前設定,還是在它們建立之後設定,都會是這樣。

如果打算将access資料庫升遷到客服/伺服器資料庫上,那麼必須注意,預設值不總是能夠被移動到伺服器上,即使伺服器支援它們。可以直接在伺服器上設定預設值,但是這些值在使用者給表添加新記錄時不會自動出現,除非使用者在沒有給包含預設值的字段添加資料的情況下儲存了該記錄。和在自動編号中一樣,可以在窗體級執行預設值,并且也有同樣的缺點。如果使用access 2007的“升遷向導”将資料移動到microsoft sql伺服器,那麼access就會将預設值導出到伺服器資料庫中,隻要可以将它們轉換為常值或t-sql(transact sql)。

練習:為state、contactdate和creditlimit字段輸入以下預設值。

切換到資料表視圖,并添加一條記錄。注意state、contactdate和creditlimit字段出現的預設值。需要的話,使用者可以覆寫這些預設值。

date( )是visual basic for applications(vba)的内部功能,用于傳回日期。當用于字段的預設值時,access會在使用者給表添加新行的時候,将目前日期輸入到該字段中。

2.5.6 有效性規則:控制字段的輸入

預設值屬性為使用者提示了一個值,有效性規則屬性則不然,它實際上限制了使用者對字段的輸入。不要企圖修改有效性規則,資料庫引擎對它有嚴格的規定。同預設值屬性一樣,這個屬性可以包含文本,也可以包含access中有效的表達式,但是,使用者定義的函數不能包含到有效性規則屬性當中。在有效性規則屬性當中,也不能包含對窗體、查詢和表的引用。

如果設定了有效性規則屬性,而沒有設定有效性文本屬性(在下一節中介紹),那麼當違反有效性規則的時候,access會自動顯示一個标準的錯誤消息。為了顯示自定義的消息,應該在有效性文本屬性中輸入消息文本。

如果計劃将access資料庫升遷到一個資料庫伺服器上,那麼就應該注意,不能總是簡單地将有效規則導出到伺服器上。有時必須使用伺服器上的觸發器重新建立它們。當違反伺服器上的有效規則時,會顯示非access定義的錯誤資訊。應該編碼使用者的應用程式,用以提供适當的錯誤資訊。在窗體級也可以執行有效規則,但是如果有其他方式通路資料,是不能強制使用它們的。如果使用access 2007的“升遷向導”将資料移動到microsoft sql伺服器,那麼該向導就會将有效規則導出到伺服器資料庫。

練習:對表中的字段添加以下有效性規則(當将光标從這個屬性上移開的時候,access會為state的縮寫添加引号)。

(1)切換到資料表視圖。如果表中已經包含了資料,那麼當存儲改動的時候,便會顯示如圖2.10所示的消息。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

在這個例子中,表達式<=date()用于限制輸入給字段的值必須是目前日期或之前的日期。因為date()表達式總是傳回目前日期,是以無論是使用者添加新的行還是修改現有的行,有效規則都會被應用。

如果單擊“是”按鈕,那麼access便将使用新的規則來驗證以前所有的資料。如果有錯誤發生,系統便會給出提示。但是,并不能知道究竟是哪一條記錄與規則發生了沖突(如圖2.11所示)。使用者必須建立一個查詢才能找出與規則發生了沖突的記錄。

如果單擊“否”按鈕,access便不會使用新的規則來驗證以前的資料,當然,這時也就不會出現問題。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

(2)在進入資料表視圖之後,試着在state字段中輸入一個無效的州名,這時将顯示一個如圖2.12所示的消息框。可以看出這些消息并不友好,是以,要使用有效性文本屬性來建立自定義消息。

v

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

有效性規則會自動地反映到包含相應表的窗體和查詢當中。不管有效性規則是在窗體和查詢的建立之前設定,還是在它們建立之後設定,都會是這樣。當為字段建立了有效性規則之後,access便不會允許null值輸入字段,這就意味着字段不能留為空白。如果要允許null值進入字段,就應該将其添加到有效性表達式in ( ca, az, ny, ma, ut ) or is null中。

有效性文本屬性用于聲明錯誤消息,當使用者違反有效性規則的時候,他們便會看到這些消息。有效性文本屬性包含的必須是文本,表達式在有效性文本屬性中是無效的。

練習:添加state、contactdate和creditlimit字段的有效性文本屬性。

試着輸入3個字段的無效值,然後檢查錯誤消息。

必填字段屬性是非常重要的,它決定是否要在字段中輸入值。當要確定将資料輸入到字段中時,這個字段對外部鍵字段非常實用。對一些包含與商務有關的資訊(如companyname)的字段,它也是至關重要的。

外部鍵字段就是指在另一個表中的可查詢字段。例如,對于客戶表和訂單表來說,它們都包含一個客戶id字段。在客戶表中客戶id是主鍵字段。而在訂單表中,客戶id是外部鍵字段,因為它的值可在客戶表中查到。

練習:将companyname和phonenumber字段的必填字段屬性設為“是”。然後切換到資料表視圖并添加一條新的記錄,這時讓companyname和phonenumber兩個字段留為空白。不過在其他字段中至少要輸入一個值。這樣,當将光标移離記錄時,将出現如圖2.13所示的錯誤消息。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

允許空字元串屬性與必填字段屬性相似。使用它可以決定是否允許使用者輸入0字長的字元串("")。空字元串與null(是指不輸入)是不一樣的,它表示對某一特定的字段來說,資料不存在。例如,外籍雇員可能沒有社會保障号碼。通過輸入一個空字元串,資料錄入人員便可以表示無社會保障号碼的情況。

練習:添加一個名為“contactname”的字段,并将其不會必填字段屬性設為“是”。然後,試着添加一條新記錄,在contactname字段中輸入兩個引号。這時将不會出現錯誤消息,因為在access 2007中,允許空字元串屬性預設為“是”。當移出該字段時,空字元串就會出現。再回到表的設計過程,将“允許空字元串”屬性設為“否”,然後進入資料表視圖,并再次在contactname字段中輸入兩個引号。這時使用者應該會看見如圖2.14所示的錯誤資訊,表示操作失敗。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

警告

在access以前的版本中,“允許空字元串”屬性的預設設定為“否”。但在access 2002、access 2003和access 2007中,microsoft已經将該預設設定更改為“是”。一定要注意該預設設定,尤其是對于習慣了操作以前版本的access使用者來說。

不要忘了,如果要取消對目前字段的改變,應該按一次esc鍵。如果要取消對目前記錄的所有改變,應該按兩次esc鍵。

“必填字段”屬性和“允許空字元串”屬性是互相作用的。如果将“必填字段”屬性設為“是”,而将“允許空字元串”屬性設為“否”,那麼就實作了對使用者的嚴格限制。這時,使用者不僅要輸入一個值,而且輸入的值還不能是0長度的字元串。

如果将“必填字段”和“允許空字元串”的屬性都設為“是”,那麼就要求使用者輸入一個值,而且輸入的值還可以是0長度的字元串。但是,如果将“必填字段”和“允許空字元串”的屬性都設為“否”,那麼就相當于允許使用者将字段留為“null”(即空白),但不允許輸入0長度的字元串。

最後,如果将“必填字段”屬性設為“否”,而将“允許空字元串”屬性設為“是”,那麼就相當于允許使用者将字段留為“null”(即空白),也允許使用者輸入0長度的字元串,是以這時對使用者是最寬容的。

當使用者搜尋字段時,索引可以提高操作處理的速度。雖然說索引多一點比索引少一點要好,但是,索引也有它的不足之處(請參考下面的例子)。一般來說,應該為那些用于搜尋、排序和查詢規則的字段提供索引。

練習:将companyname、contactname和state字段的索引屬性設為“有(有重複)”。然後單擊功能區“設計”頁籤上“顯示/隐藏”組中的“索引”按鈕,螢幕上将出現如圖2.15所示的視窗。

為了建立非主鍵多字段索引,必須使用“索引”視窗,要建立一個具有一個名字但具有多個字段的索引。如圖2.15所示,圖中給出的索引是statebycredit,它是基于creditlimit字段和state字段的組合。請注意,索引中隻有第1個字段才有索引名。第2個字段即state出現在第一個字段的下一行,它沒有索引名。

《Access 2007開發指南(修訂版)》一一2.5 字段屬性操作

索引可以加速搜尋、排序和資料分組。其缺點在于它會占用大量的硬碟空間,而且會減慢資料的編輯、添加和删除過程的速度。雖然說在大多數情況下,它帶來的便利大于它的不足,但是,不應該索引表中的每個字段。隻須為那些要用于搜尋或排序的字段或字段組合進行索引,不要為那些具有高度重複資料的字段(如一個字段具有兩個不同的值)建立索引。最後,也不要為“是/否”字段建立索引。它們隻占用一位的存儲空間,而且又隻有兩個值,是以,索引不能為“是/否”字段帶來什麼便利。

索引在資料庫伺服器上的作用很重要。當将access資料庫升遷到非microsoft伺服器上時,就不能建立索引了。此時必須在後端資料庫伺服器上重新建立所有索引。如果資料庫伺服器運作的是microsoft sql伺服器,那麼就可以使用access 2007的“access升遷向導”升遷access資料庫。該工具會在索引所處的access表位置建立伺服器表的索引。

最後一個屬性是“unicode壓縮”。“unicode壓縮”屬性值用于文本和備注字段。這個屬性用于決定字段中資料是否使用unicode壓縮來進行壓縮。在access 2000以前的版本中,資料以dbcs的格式進行存儲,這個格式用來存儲針對某一特定語言如漢語的字元資料。在access 2000及更高版本中,所有的資料都以unicode 2位元組表示格式進行存儲。雖然對這種格式對各個字元來說,要求的空間更大了(是兩個位元組而不是一個位元組),但unicode壓縮屬性能使資料盡可能地得到壓縮。如果所使用的字元集允許壓縮,而且“unicode壓縮”屬性又被設定為“是”,那麼列中的資料将以壓縮格式存儲。