首页 > 解决方案 > MS Access 显示与组合框中的保存值

问题描述

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

每个员工只有一个经理,但每个经理可以管理多个员工。为了将员工添加到数据库,我有这个表单:Employee Form

就目前而言,用户在添加员工时必须输入新员工的经理的 ManagerID。我希望用户从组合框中选择新员工的经理。下拉选项应该是经理的姓名(例如,来自 Managers 表的 FullName 列)。但是,一旦用户从下拉列表中选择了一个名称,我希望将与该名称对应的 ManagerID 保存在新员工条目的 ManagerID 字段中。

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

标签: sqldatabasems-accessms-access-2016

解决方案


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

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

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

然后转到 ComboBox 的 Format 选项卡并将 Column Count 设置为 3。适当地设置列宽;隐藏带有 ID 字段的第一列,将其设置为 0,并将其他列宽设置为任何看起来合适的值。例如:0";0.5"'0.5"将隐藏第一列,并将其他两列设置为半英寸宽。

要让 TextBox 自动在 ComboBox 中显示经理的 ID 号(老实说,如果您出于某种原因不需要显示它,为什么不完全对用户隐藏 ID 字段?值得深思),您将需要将 VBA 代码添加到 ComboBox 的 AfterUpdate 事件中。这样,每当组合框更新时,文本框都会相应更改。您可能需要先进入设计模式并将表单的“HasModule”属性更改为“是”;之后,使用组合框属性表的“事件”选项卡打开“更新后”事件的代码生成器。它应该带您进入 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 第一列的值。


推荐阅读