2012-04-01 25 views
1

請幫我解決一個概念性問題,我一直試圖找出過去3天的現狀。我試圖使用Access來集中跟蹤以前在單獨的Excel電子表格中完成的培訓。我有大約340名員工,這些員工分爲12個不同職位,並且都有不同程度的所需培訓。我有下面的例子:面向不同培訓要求員工的MS Access Table設計

位置1: A類,B類,C類 位置2: A類,B類 位置3: A類 位置4: A類

正如您所看到的,所有340名員工都需要進行A級培訓。但是隻有一些職位需要B類甚至是C類。現在我有一張單獨的表格,其中包含個人姓名和相關聯繫信息以及所有12個可能的類別。我想要訪問的只是存儲他們完成培訓的日期,沒有別的。我遇到的問題是,日期/時間字段無法區分需要接受該類的人並且還沒有完成它(空值),而不需要接受該類的人顯然還沒有完成它(也是一個空值)。

我已經試過什麼:使用計算字段將在值輸入

-A查詢「NOT REQ」如果作業位置不需要培訓。示例如下: HAZMAT檢查員:IIf([POSITION] =「裝載計劃員」,[HAZ檢查員],「NOT REQ」) 爲什麼它不起作用:插入文本到字段中將其從日期到文本字段,所以我不能再使用日期函數來確定培訓是否過期。此外,我無法編輯表單上的字段,並將其保存回原始表格,因爲它是一個計算字段。
可能的解決方案(?):使用VBA中的SQL Update語句將計算字段的值寫回到原始表中?我仍然遇到問題,我不能更新字段開始在窗體上...

-每個位置(?)的分離表:我看到與這個主要問題是,許多職位需要同樣的確切類,所以我會輸入很多冗餘信息。

- 爲每個類(?)分離表:我可以看到我如何更安全的使用這條路線,但爲了使它有用,我想我必須寫一些類型的VBA代碼,當我將某人分配到職位X時,他的職員ID將根據其職位的培訓要求自動填入表A,B,& C中。這是可行的嗎?這是最好的選擇,還是我剛剛脫穎而出?

回答

0

正如您已經解釋過的,您無法在計算字段中輸入條目。你需要一種不同的方法。這種方法取決於您是否每個表格只顯示一名員工(Single Form),或者您是否顯示員工列表(Continuous FormDatasheet)。

在一個Single Form我只想禁用不適用

me!txtClassBDate.Enabled = me!txtPosition = 2 

您可以從Form_Current,並可能在用來改變位置類型控件的AfterUpdate調用此代碼的字段。


另一種可能性是使用條件格式。選擇日期 - TextBox;然後打開菜單「格式」>「條件格式化...」(我不知道Acc 2007+的功能區在哪裏)。在這裏,您可以根據表達式的評估來定義控件的外觀。您也可以將控件設置爲禁用狀態。