【发布时间】:2017-11-29 21:40:58
【问题描述】:
我是 MS Access 的新手,一直在开发一个基本的 CRM 系统。到目前为止一切顺利,但我认为这是一个非常简单的问题......我可以理解 VBS 并在一般情况下绕过 Access,但绝不是这两个领域的专家。
如何使未绑定的组合框根据表中的其他值自动将自身设置为某个值?
我有一个供用户编辑员工信息的表单,其中包括用于输入员工部门和分公司的组合框。大约有10个部门,每个部门大约有5个分支机构。
Branch 组合框将 BranchID 保存到 tblEmployee 表中,它充当 tblBranch 表的键。 tblBranch表也有BranchName和DivisionID,DivisionID作为tblDivision表的key,基本上只有Division ID和DivisionName。
现在 Division 组合框是未绑定的,因为这只是为了允许用户缩小 Branches 组合框的范围。一旦单击“部门”组合框,像这样向下级联菜单就可以正常工作,但是当我打开表单时,“部门”组合框显示为空白(因此“分支”组合框也显示为空白,因为它具有对“部门”组合框的标准引用)。
如何让 Division 组合框查看特定员工的 BranchID 是什么,然后使用相关 Division 进行预设?
我尝试通过设置绑定和事件来做到这一点,但我无法让任何一种方式正常工作......(可能只是我的新手)。
谢谢!
谢谢!很高兴看到我通常走在正确的道路上。但是,它仍然无法正常工作,我认为这是因为我不了解 YourEmployeeIDField。
我的代码如下:
Private Sub cboDivision_Enter()
Dim sql_ As String
sql_ = "SELECT d.Division " & _
"FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _
"WHERE e.EmployeeID=" & Me.txtEmployeeID
Me.cboDivision.RowSource = sql_
End Sub
我删除了组合框上的选择条件,以确保不会意外过滤掉内容。
我尝试使用 EmployeeID、e.EmployeeID、txtEmployeeID(表单上的字段)和 Me.txtEmployeeID,但运气不佳。
在稍微研究了 RowSource 方法之后,我想知道我可能没有解释我到底想要什么? (或者我只是误解)组合框 cboDivision 填充了 tblDivision.Division,这是我想要的。但是,因为它是未绑定的,所以当我的表单中加载一条记录时,cboDivision 是空白的。我希望它显示与绑定的 cboBranch 组合框关联的 Division(但是当您单击 cboDivision 时,它仍然具有可供选择的 Division 的完整列表)。
我正在使用的按钮代码如下(它是简化的 SQL,但您的代码会出现相同的结果):
Private Sub Command240_Click()
'Me.cboDivision.Value = 8
Dim sqlStr As String
sqlStr = "SELECT d.DivisionID" & _
"FROM tblDivision d INNER JOIN tblBranch b ON b.DivisionID = d.DivisionID)" & _
"WHERE b.BranchID=" & BranchID
Me.cboDivision.Value = sqlStr
MsgBox ("You clicked me.")
End Sub
注释掉的“Me.cboDivision.Value = 8”使 cboDivision 组合框显示与 DivisionID 8 关联的分区,这实际上是我想要的;但是,如果我单击带有当前代码的按钮,组合框会更新为:“SELECT d.DivisionIDFROM tblDivision d INNER JOIN tblBranch b ON b.DivisionID = d.DivisionID)WHERE b.BranchID=45”
(最后的 45 是记录的正确 BranchID,因此该部分至少可以正常工作)。
【问题讨论】:
-
您可能必须使用 VBA 来设置相关的组合框 RowSource 属性。发布您尝试的代码。
-
您需要向 SQL 提供某种 ID,以便将过滤结果获取到该特定 ID。如果表单已绑定,请尝试
Me!EmployeeID其中EmployeeID是保存 ID 的字段的名称。 -
我现在有这方面的工作要做。我想我实际上要做的是设置 cboDivision 的值。我正在使用按钮对其进行测试,只是为了进行故障排除。我通过使用
Me.cboDivision.Value = 18让它成功工作,然后显示与 DivisionID 编号 18 关联的 Division;但是,当我尝试在按钮事件中使用任何 SQL 代码时,它显示的值是 SQL 代码......而不是对 SQL 查询的响应。
标签: ms-access combobox ms-access-2010