【问题标题】:Form combo box is displaying the wrong information表单组合框显示错误信息
【发布时间】:2019-07-09 21:33:31
【问题描述】:

我有一个未绑定的组合框,允许用户选择员工姓名(请求者)。选择该员工后,它会更新下一个框以显示该特定员工的经理姓名(所有者)。

我将 ManagerID 作为查找查询中的绑定列,并且员工的姓名应该在选择时显示在表单中。相反,在用户选择员工后,该框会显示分配给该经理的第一位员工的姓名。例如,我单击组合框,我会看到一个员工列表(该部分显示正确)。我选择了莎莉苏。只要我选择 Sally Sue,框中的文本就会显示 Bob Bath,这是 Sally 的经理在数据库列表中的第一个员工。

这是最大的问题...当我检查此表单更新的表格时,Sally Sue 位于正确的位置。我所有的数据都在正确的位置。唯一错误的是,在用户选择员工后,员工在表单上显示错误。它不会影响我数据的准确性,只是很烦人。

我将绑定列设为 1,但我尝试将其移动到 2 并将列宽设为 0 并将我的员工姓名移动到查询的第一个位置。

这是我的查询显示的 SQL 代码:

SELECT tbl_Owner.Owner_ID, 
    tbl_Requester.RequesterName, 
    tbl_Owner.ownerName 
    AS RequestOwner
FROM tbl_Owner INNER JOIN tbl_Requester ON 
    tbl_Owner.Owner_ID = 
    tbl_Requester.RequestOwner
ORDER BY tbl_Requester.RequesterName;

选择员工姓名后,表单应显示所选员工的姓名。相反,它显示的是经理分配的第一个员工姓名。

【问题讨论】:

  • 您应该在“更新后事件”中有一个 me.repaint,以便它知道用新数据重新绘制表单。试试看,如果可行,请告诉我。
  • 该查询甚至没有显示 ManagerID 和 EmployeeID 字段。该查询与问题有什么关系?如果 BoundColumn 是 ManagerID,那么您将按该值过滤记录,而不是 EmployeeID。因此,您当然会看到与该经理关联的第一条记录。编辑问题以显示应用过滤器的代码。
  • 当员工被选中时,您如何以及将什么传递到另一个框?

标签: sql ms-access vba ms-access-2010


【解决方案1】:

假设表结构如下:

所以我假设每个员工只能有一个经理。创建一个以员工表作为记录源的表单(因为您想显示员工详细信息。)
将两个组合框添加到表单标题(cboEmployees、cboManagers)。对于每个组合框,将控制源留空。 cboEmployee 绑定列 = EmployeeId,cboManagers 绑定列 = ManagerID。

cboEmployees.recordsource = SELECT Employees.EmployeeID, Employees.EmployeeName, Employees.ManagerFK
FROM Employees;
cboManagers.recordsource = SELECT Managers.ManagerID, Managers.ManagerName
FROM Managers;

隐藏您不想看到的组合框列,然后将 cboEmployees afterupdate 事件设置为:

Private Sub cmbEmployee_AfterUpdate()
cmbManager.Value = cmbEmployee.Column(2) 'set cmbManager to employees manager
Me.Filter = "EmployeeID = " & cmbEmployee.Value 'filter form to just the employees data
Me.FilterOn = True
End Sub

现在,当您在左上方的组合框中更改员工姓名时,右上方的组合框会显示经理姓名。此表单的详细信息中仅包含员工姓名,但也会发生变化。

之前:

之后:

【讨论】:

  • 其实经理可以有很多员工,员工也可以有很多经理。我正在努力调整你给我的东西。你给了我一个方向,谢谢。如果我弄明白了,我会告诉你的。
  • Doug Coats,me.paint 不起作用。不过谢谢!
  • 您应该只需要通过添加联结表将员工与经理的关系调整为多对多关系。这是 1 个示例的链接。 tutorialspoint.com/ms_access/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2016-07-25
  • 2013-08-20
  • 2019-02-03
相关资源
最近更新 更多