难以填充未绑定的组合框
我是MS Access的新手,并且一直在开发基本的CRM系统。到目前为止,所有方法都进行得很顺利,但是我对我的想法是一个非常简单的问题,我可以理解它......我可以理解VBS并在一般情况下解决Access问题,但绝不是任何领域的专家。难以填充未绑定的组合框
如何使未绑定的组合框自动根据表中的其他值自行设置为某个值?
我有一个表格供用户编辑员工信息,其中包括用于输入员工分部和分部的组合框。大约有10个师,每个师有5个分支。
分支组合框将BranchID保存到tblEmployee表中,并将其作为tblBranch表的键。 tblBranch表还具有BranchName和DivisionID,DivisionID作为tblDivision表的关键字,基本上只有分区ID和分区名称。
现在分区组合框未被绑定,因为这仅仅是允许用户缩小分支组合框的范围。如果单击分区组合框,级联菜单就会正常工作,但是当我打开表单时,分组组合框显示空白(因此分支组合框也显示空白,因为它具有对分组组合框的标准引用)。
我该如何让分部组合框查看特定员工的BranchID,然后向相关分部预先设置?
我试图通过设置一个绑定和一个事件来做到这一点,但我无法让任何一种方式正常工作...(可能只是我的新手)。
谢谢!
谢谢!很高兴看到我一直在正确的道路上。然而,它仍然不起作用,我认为这是因为我不了解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组合框关联的分区(但是当您点击cboDivision时,它仍然有可用于选择的完整分区列表)。
,我正在使用的按钮代码如下所示(它简化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。值= 8“使cboDivision组合框显示与DivisionID 8相关的分区,这是我想要的;但是,如果我用当前代码单击按钮,组合框将更新为:”SELECT d.DivisionIDFROM tblDivision d INNER JOIN tblBranch b关于b.DivisionID = d.DivisionID)WHERE b.BranchID = 45"
(45在端部是该记录的正确BranchID,使得一部分至少是工作)。
您需要更改组合框的RowSource属性,以根据所选的EmployeeID填充正确的分区信息。
您可以对t他控制的输入事件:
Private Sub YourComboBoxName_Enter()
Dim sql_ As String
sql_ = "SELECT d.DivisionName " & _
"FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _
"WHERE e.EmployeeID=" & YourEmployeeIDField
Me.YourComboBoxName.RowSource = sql_
End Sub
ComboBox控件的行来源类型必须设置为Table/Query
。
谢谢科斯塔斯。我已经更新了更多细节的原始问题。 –
我想出了我想做的事......也许是我没有正确解释它。做什么,我需要的代码如下:
Private Sub Form_Current()
Me.cboDivision.Value = DLookup("DivisionID", "tblBranch", "BranchID=" & BranchID)
Me.cboMinistry.Value = DLookup("MinistryID", "tblDivision", "DivisionID=" & Me.cboDivision)
End Sub
所以,当我改变目前的记录,它更新基于BranchID的限值未绑定的组合框。
感谢您的帮助,响应者!
您可能必须使用VBA来设置从属组合框RowSource属性。发布您的尝试代码。 – June7
您需要为SQL提供某种类型的ID,以便将筛选结果转换为该特定ID。如果表单已绑定,请尝试'Me!EmployeeID',其中'EmployeeID'是持有该ID的字段的名称。 –
我现在已经有了这方面的工作。我想我应该做的是设置cboDivision的价值。我正在使用按钮对其进行测试,只是为了排查故障。 我通过使用Me.cboDivision.Value = 18来成功地工作,然后显示与DivisionID number 18相关联的Division;但是,当我尝试在按钮事件中使用任何SQL代码时,它显示的值是SQL代码...而不是对SQL查询的响应。 –