我的局限性在于我必须坚持旧的(凌乱的)桌子设计。在我正在开发的这个界面上,有一个下拉列表,它是一个固定值列表。选项为Group1,Group2和Group3。基于此,需要将一个依赖组合设置为正确的行源和控制源。
该表单已锁定,用户可以浏览记录(第一,最后,下一个上一个和一个未绑定的组合以跳转到记录)。在这些操作中,我只想刷新依赖组合应该从哪个列表中提取,以及它应该绑定到哪个值,以显示正确的值。
[当用户单击以创建“新”记录时,在他们在第一个组合中选择一个值之前,我不会显示依赖项下拉列表(或启用它。尚未决定)。是。
为了控制这一点,我创建了一个用于此表单的函数。这是该功能:
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时,它转到函数的最后一行: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
假设您的表单已绑定到表,例如我的表,则控制源需要= “ fieldname”。它必须是双引号中的字段名称。不是me.fieldname,因为这样最终会使控制源成为该字段名的值。它也不能是[table1]![field1]我尝试过,而且也不起作用。
上面的作品很漂亮。现在来测试表格的其余部分!