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

问题描述 投票:0回答:1

我的局限性在于我必须坚持旧的(凌乱的)桌子设计。在我正在开发的这个界面上,有一个下拉列表,它是一个固定值列表。选项为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个具有交替可见性的组合,似乎更容易。是否有原因无法按照我想要的方式工作?

谢谢!

combobox access-vba ms-access-2010
1个回答
0
投票

就这样,我想通了。当然,这需要我一整天,并发布此问题才能解决。

这里是函数,使用正确的语法:

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]我尝试过,而且也不起作用。

上面的作品很漂亮。现在来测试表格的其余部分!

© www.soinside.com 2019 - 2024. All rights reserved.