sql - MS Access 显示与组合框中的保存值
问题描述
我有一个简单的数据库,其中包含两个表和它们之间的一个关系:Employees、Managers、Relationship。
每个员工只有一个经理,但每个经理可以管理多个员工。为了将员工添加到数据库,我有这个表单:Employee Form。
就目前而言,用户在添加员工时必须输入新员工的经理的 ManagerID。我希望用户从组合框中选择新员工的经理。下拉选项应该是经理的姓名(例如,来自 Managers 表的 FullName 列)。但是,一旦用户从下拉列表中选择了一个名称,我希望将与该名称对应的 ManagerID 保存在新员工条目的 ManagerID 字段中。
我可以通过基于查询的表单来解决这个问题,还是需要使用一些 VB 代码自定义表单/组合框?
解决方案
这基本上只需要一行 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 第一列的值。
推荐阅读
- php - 为什么在尝试使用 laravel helper kebab case 时会出现此非对象错误?
- vue.js - 通过脚本注入时未执行 Vue 包
- c# - 在 C# 中从 mysql/sql 客户端切换到 ODBC 客户端时出现“System.AccessViolationException”
- reactjs - 逐一添加行,而不是在 ag-grid 中使用 rowData 列表
- javascript - 多步骤表单需要某些字段才能进入下一步
- r - r: 不能使用 get() 在 colnames() 中检索变量名
- rust - 如何返回对移动框中某些内容的引用?
- sql-server - SSIS 运行运行 powershell 脚本但 SSMS 不运行的包
- linux - 如何从 shell 日志文件中提取用户列表?
- python - Word2Vec/Doc2vec + K-Means 聚类 - 如何提取“语义上有意义的”质心?