请帮我解决一个过去3天我一直想弄清楚的概念性问题。我正在尝试使用Access来集中跟踪以前在单独的Excel电子表格上完成的培训。我有大约340名员工,分为12个不同的职位,所有职位都有不同程度的培训。我有一个例子如下:
职位1: A类,B类,C类 职位2: A类,B类 职位3: A类 职位4: A类
如您所见,所有340名员工都需要接受A级培训。但只有一些职位需要B级甚至C级。现在我有一个单独的表格,其中包含个人姓名和相关的联系信息以及所有12个可能的类别。我想要访问的是存储他们完成培训的日期,没有别的。我遇到的问题是,日期/时间字段无法区分需要接受该类并且尚未完成它的人(空值)与不需要接受该类的人并且显然还没有完成它(也是一个空值)。
我尝试了什么:
- 使用计算字段进行查询,如果作业位置不需要培训,则输入值“NOT REQ”。一个例子如下: HAZMAT检查员:IIf([POSITION] =“负载计划员”,[HAZ检查员],“不需要”) 为什么它不起作用:在字段中插入文本会将其从日期更改为文本字段,因此我无法再使用日期函数来确定培训是否已过期。此外,我无法编辑表单上的字段并将其保存回原始表,因为它是一个计算字段 可能的解决方案(?):在VBA中使用SQL Update语句将计算字段的值写回原始表中?我仍然遇到问题,我无法在表单上更新字段...
- 每个位置的分隔表(?):我看到的主要问题是很多位置需要完全相同的类,因此我会输入大量冗余信息。
- 每个类的独立表(?):我可以看到我如何使用这条路线更安全,但是为了它有用我想象我必须写一些类型的VBA代码,它说什么时候我将某人分配给职位X,他的员工ID自动填入表A,B和表A中。 C基于他的职位培训要求。那可行吗?这是最好的选择,还是我不合适?
答案 0 :(得分:0)
如您所述,您无法在计算字段中输入内容。您将需要一种不同的方法。该方法取决于您是否每个表单只显示一名员工(Single Form
),或者是否显示员工列表(Continuous Form
或Datasheet
)。
在Single Form
上我只会禁用不适用的字段
me!txtClassBDate.Enabled = me!txtPosition = 2
您可以从Form_Current
调用此代码,也可以在用于更改位置类型的控件的AfterUpdate
中调用此代码。
另一种可能性是使用条件格式。选择日期 - TextBox
;然后打开菜单“格式”> “条件格式......”(我不知道Acc 2007+的丝带在哪里)。您可以在此处根据表达式的评估来定义控件的外观。您还可以将控件设置为禁用状态。