Access 2010 - 动态设置组合控件源和行源



我受到限制,因为我必须坚持旧的(凌乱的(表格设计。 在我正在开发的这个界面上,有一个组合下拉列表,它是一个固定值列表。 选项包括组 1、组 2 和组 3。 基于此,需要将依赖组合设置为正确的行源和控制源。

窗体已锁定,用户可以导航记录(第一个、最后一个、下一个上一个记录以及用于跳转到记录的未绑定组合(。在这些操作期间,我只想刷新依赖组合应从哪个列表拉取,以及它应绑定到哪个值,以显示正确的值。

当用户单击以创建"新"记录时,我不会显示依赖下拉列表(或使其启用,尚未决定(,直到他们在第一个组合中选择一个值,告诉我们它是哪个组。

为了控制这一点,我创建了一个用于此窗体的函数。 这是该函数:

Private Function MyGroup()
'Mybitval is a table value that is a bit data type. It means group1       
If Me.Mybitval = True Then
Me.cboGroupType.Value = "Group1"
ElseIf Me.Mybitval = False And Nz(Me.MyID1, 0) <> 0 Then
Me.cboGroupType.Value = "Group2"
ElseIf Me.Mybitval = False And Nz(Me.MyID1, 0) = 0 Then
Me.cboGroupType.Value = "Group3"
End If
Select Case Me.cboGroupType
Case "Group1"
Me.cboGroupName.RowSource = "SELECT Group1.ID, Group1.G1Name FROM Group1 ORDER BY Group1.G1Name;"
Me.cboGroupName.ControlSource = me.FKID1
Case "Group2"
Me.cboGroupName.RowSource = "SELECT Group2.ID, Group2.G2Name FROM Group2 ORDER BY Group2.G2Name;"
Me.cboGroupName.ControlSource = Me.FKID2
Case "Group3"
Me.cboGroupName.RowSource = "SELECT Group3.G3ID, Group3.G3Name FROM Group3 ORDER BY Group3.G3Name;"
Me.cboGroupName.ControlSource = me.FKID1
End Select
Debug.Print Me.cboGroupName.RowSource
Debug.Print Me.cboGroupName.ControlSource
Debug.Print Me.cboGroupName.Value
End Function

这个想法是,我在加载时调用此函数,在我转到第一条记录之后,然后在任何导航按钮单击或更新转到组合之后调用此函数。

问题是,cbogroupname 从不显示它在控制源中的值。当我尝试加载表单时,我的调试行源显示正确的 sql,并且控件源显示它所在的当前记录的正确表字段的值,但 2 件事似乎不起作用。如果我不对值进行第三次调试,表单加载正常,但组合不会显示正确的值,即使它绑定到具有值的表列也是如此。 如果调试该值,我会收到运行时错误"2424":"您输入的表达式具有 [我的应用程序] 找不到的字段、控件或属性名称。

当我点击调试时,它会转到函数的最后一行: Debug.Print Me.cboGroupName.Value

当我去保存新记录时,我会进行验证,并且拥有这 1 个组合,而不是 3 个不同的组合,交替可见性,似乎更容易。 有没有理由不按照我想要的方式工作?

谢谢!

就这样,我想通了。 当然,这需要我一整天的时间,并发布这个问题才能得到它。

这是具有正确语法的函数:

Private Function MyGroup()
If Me.Mybitval = True Then
Me.cboGroupType.Value = "Group1"
ElseIf Me.Mybitval = False And Nz(Me.MyID1, 0) <> 0 Then
Me.cboGroupType.Value = "Group2"
ElseIf Me.Mybitval = False And Nz(Me.MyID1, 0) = 0 Then
Me.cboGroupType.Value = "Group3"
End If
Select Case Me.cboGroupType
Case "Group1"
Me.cboGroupName.RowSource = "SELECT Group1.ID, Group1.G1Name FROM Group1 ORDER BY Group1.G1Name;"
Me.cboGroupName.ControlSource = "FKID1"
Case "Group2"
Me.cboGroupName.RowSource = "SELECT Group2.ID, Group2.G2Name FROM Group2 ORDER BY Group2.G2Name;"
Me.cboGroupName.ControlSource = "FKID2"
Case "Group3"
Me.cboGroupName.RowSource = "SELECT Group3.G3ID, Group3.G3Name FROM Group3 ORDER BY Group3.G3Name;"
Me.cboGroupName.ControlSource = "FKID1"
End Select
Debug.Print Me.cboGroupName.RowSource
Debug.Print Me.cboGroupName.ControlSource
Debug.Print Me.cboGroupName.Value
End Function

如果您的表单绑定到表(例如我的表单(,则控件源需要 ="字段名称">。它必须是用双引号括起来的字段名称。不是me.fieldname,因为这最终使控件源成为该字段名称的值。它也不能是[表1]![字段 1]我试过了,那也不起作用。

以上效果很好。 现在测试表单的其余部分!

最新更新