請選擇以下任一主題,了解 Northwind 開發者版中的 員工 相關資訊。
概觀
員工有一個分割表單,作為清單和詳細表單使用。
使用員工
使用員工來新增員工並更新現有員工的資訊。
選擇 Employees 標籤,在 Employee List 表單( frmEmployeeList )中顯示員工,這是一個具有以下功能的分割表單:
- 表單上方是單一員工的視圖。
- 表格下方是所有員工的資料表視圖。
- 在任一部分選擇員工時,也會將焦點放在另一部分的該員工。
- 您可以在分割表單的任一部分新增、編輯或刪除員工。
- 使用分割表單搭配資料表檢視部分,假設表單的記錄來源有多個記錄。
分割表單可能對效能的影響
大多數開發者不 願意將未 過濾的資料表或查詢作為表單的記錄來源。 將表單篩選為單一記錄,可以減少從表格傳輸到表單的資料量。 使用本地存取表時,載入過濾過的記錄源與小型未過濾的原始碼差異可能幾乎察覺不到。 然而,當存取資料表被遠端伺服器端資料庫(如 SQL Server)取代時,這種效能就會喪失。
Northwind 的員工資料表不會太大,因此是未過濾紀錄來源的候選。 然而,綁定到其他資料表的表單,例如訂單細節,這些資料可能會成長到數千筆紀錄,卻不適合使用未過濾的記錄來源。
編輯員工
在新增或編輯分割表單的紀錄時,使用者可以在表單檢視或資料表檢視中輸入數值。 有些欄位是必填的,有些則是可選的。 表單用來驗證必填欄位中是否有值。 請參閱下方 的「必填欄位驗證 」。
查找表、值清單與下拉選單控制項
標題下拉選單限制條目為預先選定的清單。 標題放在一個叫做 Titles 的查詢表裡。
部分預期選項已儲存在查詢表中,但使用者可透過預設的連招式存取行為或下拉式控制項,新增標題至查詢表。
-
標題組合框的「限制至清單」屬性設為「是」,標題的編輯表單則在「清單項目編輯表單」屬性中識別。 在表單中選擇下拉選單,會顯示底部的編輯圖示。
-
標題組合框的「限制至清單」屬性設為「是」,標題的編輯表單則在「清單項目編輯表單」屬性中識別。 在表單中選擇下拉選單,會顯示底部的編輯圖示。
點擊編輯圖示會開啟 標題 編輯表單 frmEmployeeTitles,您可以在那裡更改或新增已核准的標題清單。
注意: 在大多數生產環境中,編輯或新增標題僅限於擁有增強權限的使用者。
自參查找欄位
員工函式說明了 Self-Referential ID欄位的概念。 為了支援指定員工的主管,表格中有一個 SupervisorID 欄位,並有其他員工 的 EmployeeID 。 若要指定主管,請在此欄位輸入另一位員工的 員工識別 碼。 存取權在此關係中強制執行參照完整性。
SupervisorID 以下拉選單或組合框的形式實作於員工表單中;其列來源是從 Employee 資料表篩選出的一組記錄。 由於查詢具有自我參照性,必須排除所選員工自己的 EmployeeID。 例如,員工 Karen Finster 的 SupervisorID 列來源中,並未包含 Karen 自己的 EmployeeID。 她不能自己當主管。
附加欄位與控制
員工照片會儲存在表格中的附件欄位。 你可以新增圖片或更改現有圖片,使用預設的 Access 行為來設定附件欄位。
注意: 我們在 員工 表格中加入附件欄位,以說明 Access 的功能。 嵌入影像會增加 accdb 的大小,因此不被視為最佳實務。 在將環境實作到生產環境前,請仔細評估。 首選的替代方案是建立一個網路資料夾,存放所有圖片,並在包含 圖片路徑的資料表中的文字欄位中建立連結,而非附件 欄位。
含相關資訊的子表單
訂單子表單 (位於員工表單右側) 顯示近期訂單 (若有員工處理) 。 子表單會在資料表檢視中依新到舊排序。 若要編輯該員工的現有訂單,請點擊訂單子表單中的超連結訂單ID #。
員工表格的記錄來源
一個名為 qryEmployees 的查詢會回傳以下表單的紀錄。 使用查詢而非表格通常被視為最佳實務。 查詢僅回傳一個資料表的紀錄。 此外,查詢也可以參數化以限制回傳的記錄數量。
- 此查詢的 Select 子句使用萬用字元「*」 來回傳 Employee 資料表中的所有欄位。
- 查詢中計算出的兩個欄位會回傳 FirstName LastName 和 LastName, FirstName。
控制組中的計算值
注意: 計算出的欄位 不會 儲存在表格中。 不過,這些資料 可以在 表格的 recordsource 中找到。
員工表單上的大多數控制項都是 啟用 的,你可以用滑鼠或分頁選取,且 未鎖定 ,可以編輯。
節目設計人員
除了內建的存取行為外,VBA 子與函式在表單、表單控制項及獨立模組中執行員工所需的基本邏輯。 以下章節將介紹函式及其實作的程式碼。
內建控制動作
表單的記錄選擇器預設行為:
- 在單一檢視中左鍵點擊表單左側的記錄選擇器,即可儲存目前的紀錄並保留任何編輯。 透過左鍵點擊記錄選擇器儲存,會觸發適當的 VBA 子與功能。
- 在單一檢視中右鍵點擊表單左側的紀錄選擇器,會跳出一個選單,可以執行像是剪切、複製或貼上記錄等操作。 刪除或剪切紀錄會觸發下述的 EmployeeCanBeDeleted 功能。
- 必須啟用紀錄選擇器,才能有表單以啟用此預設行為。
以下形式的紀錄的參考完整性
參考完整性防止刪除相關資料表中有 子 記錄的員工。 因此,若使用者嘗試刪除帶有子記錄的紀錄,Access 會觸發錯誤。 Northwind 員工表單 Access 將關於參考完整性的通用錯誤訊息替換為自訂訊息。
表單的 刪除 程序中的程式碼會回應嘗試從右鍵選單 切斷紀錄 或使用 刪除 鍵刪除記錄的嘗試。
一個私人函式 EmployeeCanBeDeleted 會檢查該員工在 訂單、 採購訂單、 員工及 員工權限 資料表中的相關紀錄。
如果找到這些紀錄,這個功能會抑制預設錯誤訊息,並以與客戶表單相同的通用對話框告知使用者該紀錄無法刪除的原因。
驗證
員工實施驗證與標準錯誤處理。 控制組的驗證有兩種方式。
- 必要欄位
- Standard 格式
必須欄位驗證
所有員工都必須填寫三個欄位:
- 名字
- 姓氏
- 職稱
在這個開發者版本中,表單的 更新前 事件會驗證所需欄位。 如果使用者嘗試儲存一個或多個沒有值的必填欄位的員工紀錄,驗證會取消儲存並標示所有沒有值的必填欄位。 在 Northwind 的員工表單中,必要的欄位驗證是由表單的 「更新前 」事件處理,而非由個別控制項處理。
員工表單的 「更新前 」事件會驗證三個必填欄位的值是否存在。 儲存新或已編輯的員工紀錄會觸發表單的 「更新前 」事件,該事件會呼叫公共函式,檢查並回應所需值的有無。
modValidation 模組包含以下函式:
- 驗證表單
- IsValidForm
- highlightInvalidControls
- HighlightControl
- ValidateForm_RemoveHighlights
管理新員工
點擊 新增員工 按鈕即可執行私人子 btnNewEmployee_Click 以:
- 儲存目前紀錄
- 將表格焦點設定為新紀錄
'
選擇查詢中的萬用字與命名欄位
qryEmployees 中的 SELECT 子句使用萬用字元「*」來選取表格中的所有欄位。 萬用字查詢設計會自動包含來自底層資料表新增的任何欄位,這是無法在特定欄位清單中實現的。 另一方面,也可以列出特定欄位,限制回傳的 記錄集 僅包含僅顯示格式所需的欄位。
適當的設計選擇
你的設計應該根據你的需求採取適當的方法。 不過,在可行的情況下,優先權通常會選擇最不可能需要未來維護 (的方法,也就是萬用卡方法) 。
綁定為查找表的組合盒 — 兩種方法
相關項目,例如員工的主管,會顯示在表單的下拉選單或組合框中。 在表單的記錄來源查詢中,只需 SupervisorID 的外鍵,因為該欄位綁定在 SupervisorID) (外鍵欄位。 組合框也會顯示對應的文字值。
一個雙欄組合盒,搭配隱藏的 ID 欄和可見的描述欄,讓這個功能運作得很順利。 在員工表單中,主管組合框綁定到一個簡單的兩欄查詢。 請參閱 RowSource 屬性以了解監督者。
然而,在某些情況下,查找表沒有獨立的主鍵,因此文字值本身就是主鍵。
當可能的值清單很小且高度穩定,例如員工職稱時,通常稱為封閉網域。 更改或新增標題的數值並不常見。 封閉域查詢表是單欄查詢方法的候選方案。
在員工表單中,標題組合框綁定為一欄的職稱查詢。 請參閱 RowSource 屬性以了解標題。