選取下方任何主題,以瞭解 Northwind 開發人員版中的 員工 。
概觀
[員工] 有一個分割表單,可做為清單和詳細資料表單。
使用員工
使用 [員工] 來新增員工,並更新現有員工的資訊。
選取功能區上的 [員工 ] 索引標籤,以在 [員工清單] 表單 frmEmployeeList 中顯示員工,這是一個具有下列功能的分割表單:
- 表單的頂端是一個員工的單一檢視。
- 表單的下半部分是所有員工的資料工作表檢視。
- 選取任一部分的員工,也會將焦點放在分割表單另一部分的該員工身上。
- 您可以在分割表單的任一部分中新增、編輯或刪除員工。
- 搭配 [資料工作表檢視] 組件使用分割表單時,會假設表單的記錄來源有多筆記錄。
分割表單的潛在效能影響
大部分開發人員 都偏好不 將未篩選的資料表或查詢載入為表單的記錄來源。 將表單篩選為單一記錄,可將要從資料表傳輸到表單的資料量降至最低。 使用本機 Access 資料表時,載入已篩選的記錄來源與載入未篩選的小型記錄來源之間的差異可能幾乎不會明顯。 不過,當 Access 資料表被取代為遠端伺服器型資料庫,例如 SQL Server 時,此效能會喪失。
Northwind 中的員工資料表不應變得很大,因此它是未篩選記錄來源的候選項目。 不過,繫結至其他資料表的表單,例如訂單詳細資料,可能會成長到數千筆記錄,則不適合未篩選的記錄來源。
編輯員工
在分割表單中新增或編輯記錄時,使用者可以在 [表單檢視] 或 [資料工作表檢視] 中輸入值。 有些欄位為必要欄位,有些為選用。 表單會驗證 [必要] 欄位中是否有值。 請參閱下方的 [必要欄位驗證 ]。
查閱表格、值清單和下拉式控制項
[ 標題] 下拉式清單會將項目限制為預先選取的標題清單。 標題位於名為 [標題] 的查閱資料表中。
一些預期的選擇已儲存在查閱表格中,但使用者可以使用下拉式方塊的預設 Access 行為或下拉式控制項,將新的標題新增至查閱表格。
- [標題] 下拉式方塊的 [限制至清單] 屬性設為 [是],且 [標題] 的編輯表單會在 [清單項目編輯表單] 屬性中識別。 選取表單上的下拉式清單,底部邊緣會顯示 [編輯] 圖示。
- [標題] 下拉式方塊的 [限制至清單] 屬性設為 [是],且 [標題] 的編輯表單會在 [清單項目編輯表單] 屬性中識別。 選取表單上的下拉式清單,底部邊緣會顯示 [編輯] 圖示。
按一下編輯圖示會開啟 [職稱 ] 編輯表單 frmEmployeeTitles,您可以在其中變更或新增至核准的職稱清單。
注意: 在大部分的生產環境中,編輯或新增遊戲僅限於具有增強權限的使用者。
自我參照查閱欄位
employee 函數說明了 Self-Referential 識別碼欄位的概念。 為了支援指定員工的主管,資料表有一個 SupervisorID 欄位,其中包含其他員工的 EmployeeID 。 若要指定主管,請在此欄位中輸入另一位員工的 EmployeeID 。 Access 會在此關聯上強制執行參考完整性。
SupervisorID 會在員工表單中實作為下拉式清單或下拉式方塊;其 rowsource 是 [員工] 資料表中經過篩選的一組記錄。 由於這是自我參照,因此查詢必須排除所選員工自己的 EmployeeID。 例如,員工 Karen Finster 的 SupervisorID 資料列來源不包含 Karen 自己的 EmployeeID。 她不能成為自己的主管。
附件欄位和控制項
員工相片會儲存在資料表的附件欄位中。 您可以使用附件欄位的預設 Access 行為來新增影像或變更現有影像。
注意: 我們在 [員工] 資料表中納入附件欄位,以說明 Access 中的功能。 內嵌影像會增加 accdbs 的大小,因此不被視為最佳做法。 在生產應用程式中實作之前,請先仔細評估您的環境。 慣用的替代方案是儲存所有影像的網路資料夾,以及表格中包含 影像路徑的文字欄位中的連結,而不是 [附件 ] 欄位。
含有相關資訊的子表單
[員工] 表單右側的 [訂單] 子表單 () 顯示該員工處理過的近期訂單 (如果有) 。 子表單會在 [資料工作表檢視] 中列出訂單,並以最新到最舊排序。 若要編輯該員工的現有訂單,請按一下 [訂單] 子表單中超連結的 [訂單識別碼 #]。
員工表單的記錄來源
名為 qryEmployees 的查詢會傳回表單中的記錄。 通常認為是最佳作法,而應該使用查詢。 查詢只會傳回一個資料表中的記錄。 此外,還可以參數化查詢以限制傳回的記錄數目。
- 此查詢的 Select 子句使用萬用字元 '*' 從 Employee 資料表傳回所有欄位。
- 查詢中的兩個導出欄位會傳回 FirstName LastName 和 LastName, FirstName。
控制項中的計算值
注意: 計算欄位 不會 儲存在資料表中。 不過,它們 可在 表單的 記錄來源中使用。
[員工] 表單上的大部分控制項都 已啟用 ,因此您可以使用滑鼠或 Tab 鍵進行選取,而且 未鎖定 ,因此可編輯。
程式設計員工
除了內建的 Access 行為之外,表單、表單控制項和獨立模組中的 VBA 子功能和函數也會執行員工所需的基本邏輯。 下列章節將說明函數,以及實作這些函數的程式碼。
內建控制項動作
表單的 [記錄選取器] 預設行為:
- 在單一檢視中以滑鼠左鍵按一下表單左側的記錄選取器,會儲存包含任何編輯內容的目前記錄。 以滑鼠左鍵按一下記錄選取器來儲存會觸發適當的 VBA 子和函數。
- 在單一檢視中以滑鼠右鍵按一下表單左側的記錄選取器,會彈出功能表來執行 [剪下]、[複製] 或 [貼上] 等動作。 刪除或剪下記錄會觸發下述的 EmployeeCanBeDeleted 函數。
- 表單必須啟用記錄選取器,此預設行為才可使用。
表單中記錄的參考完整性
參考完整性可防止刪除在相關資料表中具有 子 記錄的員工。 因此,如果使用者嘗試刪除含有子記錄的記錄,Access 會引發錯誤。 Northwind 員工表單 Access 會以自訂訊息取代有關參考完整性的一般預設錯誤訊息。
表單 [ 刪除 ] 程序中的程式碼會回應從快顯功能表剪 下記錄 ,或使用 Delete 鍵刪除記錄的嘗試。
私人函數 EmployeeCanBeDeleted 會在 [訂單]、[ 訂購單]、[ 員工] 和 [ 員工權限 ] 資料表中檢查該員工的相關記錄。
如果找到它們,此函數會隱藏預設錯誤訊息,並使用 與客戶 表單用來通知使用者無法刪除客戶原因相同的一般對話方塊來通知使用者無法刪除 記錄 的原因。
驗證
員工實施驗證和標準錯誤處理。 控制項的驗證有兩種類型。
- 必要欄位
- Standard 格式
必要欄位驗證
所有員工都必須填寫三個欄位:
- 名字
- 姓氏
- 職稱
在此開發人員版本中,表單的 [更新前 ] 事件會驗證必要欄位。 如果使用者嘗試儲存的員工記錄沒有一或多個沒有值的必要欄位的值,驗證會取消儲存,並醒目提示任何沒有值的必填欄位。 在 Northwind 的 [員工] 表單中,必要欄位驗證是由表單的 [ 更新前 ] 事件處理,而非由個別控制項處理。
[員工] 表單的 [ 更新之前 ] 事件會驗證三個必填欄位的值是否存在。 儲存新的或已編輯的員工記錄會觸發表單的 [更新前 ] 事件,該事件會呼叫公用函數來檢查並回應必要值的存在與否。
modValidation 模組包含下列函式:
- ValidateForm
- IsValidForm
- HighlightInvalidControls
- HighlightControl
- ValidateForm_RemoveHighlights
管理新員工
按一下 [新增員工 ] 按鈕會執行私人子 btnNewEmployee_Click ,以便:
- 儲存目前的記錄,並
- 將表單的焦點設定在新記錄
'
選取查詢中的萬用字元與具名欄位
qryEmployees 中的 SELECT 子句使用萬用字元 “*” 來選取資料表中的所有欄位。 萬用字元查詢設計會自動包含基礎資料表中任何新新增的欄位,這在特定欄位清單中是不可能的。 另一方面,您可以列出特定欄位,以將傳回 的資料錄集 限制為僅限顯示表單中需要的欄位。
適當的設計選擇
您的設計應基於適合您要求的方法。 儘管在可行的情況下,通常會優先選擇最不可能需要未來維護的方法 (即通配符方法) 。
繫結至查閱表格的 ComboBox — 兩種方法
相關項目,例如員工的主管,會顯示在表單上的下拉式清單或下拉式方塊中。 表單的記錄來源查詢中只需要 SupervisorID 的外部索引鍵,因為該欄位會繫結至 SupervisorID) (外部索引鍵欄位。 下拉式方塊也會顯示對應的文字值。
具有隱藏識別碼欄和可見描述欄的兩欄下拉式方塊可讓此作業正常運作。 在 [員工表單] 中,[主管] 下拉式方塊會繫結至簡單的兩欄查詢。 請參閱主管的 RowSource 屬性。
不過,在某些情況下,查閱表格沒有個別的主索引鍵,因此文字值本身就是主索引鍵。
當可能值的清單很小且高度穩定時,例如員工的職稱,它通常稱為封閉網域。 變更或新增 [標題] 值並不常見。 封閉式網域查閱資料表是單欄查詢方法的候選項目。
在 [員工] 表單中,[職稱] 下拉式方塊會繫結至職稱的單欄查詢。 請參閱標題的 RowSource 屬性。