难以填充未绑定的组合框

问题描述:

我是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,使得一部分至少是工作)。

+0

您可能必须使用VBA来设置从属组合框RowSource属性。发布您的尝试代码。 – June7

+0

您需要为SQL提供某种类型的ID,以便将筛选结果转换为该特定ID。如果表单已绑定,请尝试'Me!EmployeeID',其中'EmployeeID'是持有该ID的字段的名称。 –

+0

我现在已经有了这方面的工作。我想我应该做的是设置cboDivision的价值。我正在使用按钮对其进行测试,只是为了排查故障。 我通过使用Me.cboDivision.Value = 18来成功地工作,然后显示与DivisionID number 18相关联的Division;但是,当我尝试在按钮事件中使用任何SQL代码时,它显示的值是SQL代码...而不是对SQL查询的响应。 –

您需要更改组合框的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

+0

谢谢科斯塔斯。我已经更新了更多细节的原始问题。 –

我想出了我想做的事......也许是我没有正确解释它。做什么,我需要的代码如下:

Private Sub Form_Current() 
    Me.cboDivision.Value = DLookup("DivisionID", "tblBranch", "BranchID=" & BranchID) 
    Me.cboMinistry.Value = DLookup("MinistryID", "tblDivision", "DivisionID=" & Me.cboDivision) 
End Sub 

所以,当我改变目前的记录,它更新基于BranchID的限值未绑定的组合框。

感谢您的帮助,响应者!