在组合框中显示的MS Access与保存的值

问题描述

我有一个简单的数据库,其中有两个表,并且它们之间有一个关系:EmployeesManagersRelationship

每个员工只有一个经理,但是每个经理可以管理多个员工。要将员工添加数据库中,我具有以下形式:Employee Form

按现状,添加员工时,用户必须输入新员工经理的ManagerID。我想让用户从组合框中选择新员工的经理。下拉选项应为管理者的名称(例如,从“管理者”表的“全名”列中)。但是,一旦用户从下拉列表中选择了一个名称,我希望将与该名称对应的ManagerID保存在新员工条目的ManagerID字段中。

我可以通过基于查询的表单来解决此问题,还是需要使用一些VB代码自定义表单/组合框?

解决方法

这基本上只需要一行VBA代码;大部分是通过Access完成的。

将组合框的数据源指向管理器表。在属性表中“数据”下组合框的“行来源”属性中,将行来源设置为查询管理者的名字和姓氏。例如:

SELECT ManagerID,FirstName,LastName FROM tblManagers ORDER BY FirstName;

然后转到ComboBox的“格式”选项卡,并将“列数”设置为3。隐藏带有ID字段的第一列,将其设置为0,然后将其他列的宽度设置为看起来正确的值。例如:0";0.5"'0.5"将隐藏第一列,并将其他两列设置为半英寸的宽度。

要让TextBox在ComboBox中自动显示管理器的ID号(说实话,如果您出于某些原因不需要显示它,为什么不完全对用户隐藏ID字段呢? ),则需要将VBA代码添加到ComboBox的AfterUpdate事件中。这样,无论何时更新组合框,文本框都会相应更改。您可能需要首先进入设计模式,并将表单的“ HasModule”属性更改为“是”。之后,使用ComboBox属性表的“事件”选项卡打开“更新后”事件的代码构建器。它应该带您进入VBA构建器,并使用自动生成的Private Sub [combobox's name]_AfterUpdate()

将代码设置为以下内容:

Private Sub ComboBox_AfterUpdate() 'Obviously,sub your combo boxs name for ComboBox

    Me.TextBox = Me.ComboBox 'Obviously,sub your text boxs name and your combo boxs name here

End Sub

由于ComboBox的默认绑定列为第一列,因此将文本框的值设置为ComboBox的第一列的值。