难以填充未绑定的组合框

时间:2017-06-26 23:20:00

标签: ms-access combobox ms-access-2010

我是MS Access的新手,并且一直在开发基本的CRM系统。到目前为止,一切都进展顺利,但是我正在抨击我认为这是一个非常简单的问题......我可以理解VBS并且总体上可以解决Access问题,但绝不是任何一个领域的专家。

如何使未绑定的组合框根据表中的其他值自动将自身设置为某个值?

我有一个供用户编辑员工信息的表单,其中包括用于输入员工的部门和分部的组合框。大约有10个部门,每个部门有5个分支机构。

Branch组合框将BranchID保存到tblEmployee表,此表用作tblBranch表的键。 tblBranch表还有BranchName和DivisionID,DivisionID作为tblDivision表的键,它基本上只有Division ID和DivisionName。

现在,分组组合框是未绑定的,因为这仅仅是允许用户缩小分支组合框的范围。像这样级联菜单一旦你点击分区组合框就可以了,但是当我打开表格时,分区组合框显示空白(因此分支组合框也显示空白,因为它有一个标准参考分组组合框)。

如何让Division combobox查看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

注释掉了&#34; Me.cboDivision.Value = 8&#34;使cboDivision组合框显示与DivisionID 8相关的分区,这实际上是我想要的;但是,如果我单击当前代码的按钮,组合框将更新为:&#34; SELECT d.DivisionIDFROM tblDivision d INNER JOIN tblBranch b ON b.DivisionID = d.DivisionID)WHERE b.BranchID = 45&#34; < / p>

(最后的45是记录的正确BranchID,因此该部分至少正在工作)。

2 个答案:

答案 0 :(得分:0)

您需要更改组合框的 RowSource 属性,以根据所选的EmployeeID填充正确的分部信息。

您可以在控件的 Enter 事件中执行此操作:

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


组合框控件的RowSourceType必须设置为Table/Query

答案 1 :(得分: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的绑定值更新未绑定的组合框。

感谢您的帮助,响应者!

相关问题