【问题标题】:Cascading Combo box doesn't update 2nd box options级联组合框不会更新第二个框选项
【发布时间】:2017-10-24 20:16:45
【问题描述】:

我正在使用 MS Access 2010 存储有关在我们医院进行的审计的记录。我正在尝试创建一个表单,它将根据所选的下拉选项过滤审核。

我希望专业组合框从理事会级联,因此如果我选择“家庭和公共卫生”理事会,则只有该理事会内的专业会出现在下面的组合框中。

我的 ComboDirectorate 行源是 SELECT [tblDirectorate].[Directorate Key], [tblDirectorate].[Directorate] FROM tblDirectorate;

我的 ComboSpecialty 行源是 SELECT tblSpecialty.[Specialty Key], tblSpecialty.Specialty FROM tblSpecialty;

然后我有 ComboDirectorate 的更新后代码:

Private Sub ComboDirectorate_AfterUpdate()
Me.ComboSpecialty.RowSource = _
  & "SELECT [tblSpecialty].[Specialty Key], [tblSpecialty].[Specialty]" _
  & "FROM tblSpecialty WHERE [tblSpecialty].[Directorate] = " _
  & Me.ComboDirectorate
Me.ComboSpecialty.Requery
End Sub

这似乎对列出的专业没有任何影响。

我已尝试按照Can't get the cascading combo boxes to work 放入“ ”

WHERE Directorate = '" & Nz(Me.ComboDirectorate) & "' " & _

但它仍然没有根据所选的部门列出专业。

【问题讨论】:

    标签: combobox ms-access-2010


    【解决方案1】:

    我知道组合框会损坏,我必须创建新的组合框。但是,首先检查每个组合框的 BoundColumn 和 ColumnCount 属性是否设置正确。

    确保 ComboDirectorate 的值与保存到 tblSpecialty 中的值相同 - 我假设为数字 PK/FK。

    我会将 ComboSpecialty RowSource 设置为:
    SELECT [Specialty Key], Specialty FROM tblSpecialty WHERE Directorate = [ComboDirectorate];

    然后我会将代码放入 ComboSpecialty GotFocus 事件中。

    Sub ComboSpecialty_GotFocus()
    Me.ComboSpecialty.Requery
    End Sub
    

    请注意,具有查找别名的级联组合框在连续或数据表形式中效果不佳。

    建议在命名约定中不要使用空格或标点符号/特殊字符(下划线除外)。

    【讨论】:

    • 感谢您的帮助。
    • 有没有办法可以调整它,以便在未选择理事会的情况下列出所有专业?目前,按照您的建议设置了 ComboSpecialty RowSource,如果我不选择 Directorate,则 Specialty 框中不会出现任何内容。我在想,如果有人不知道该专业所在的理事会,但知道该专业。
    • 可能有一些类似于Private Sub ComboSpecialty_Click() If Directorate = "" Then Me.ComboSpecialty.RowSource = "SELECT tblSpecialty.[Specialty Key], tblSpecialty.Specialty FROM tblSpecialty" ElseIf Directorate <> "" Then Me.ComboSpecialty.RowSource = "SELECT [Specialty Key], Specialty FROM tblSpecialty WHERE Directorate = [ComboDirectorate]" End If End Sub的代码
    • 您想允许没有董事的记录?是的,如果适合您的需要,请使用代码设置 RowSource。
    【解决方案2】:

    使用 June7 的答案,我编写了以下代码:

    Private Sub ComboSpecialty_GotFocus()
      If IsNull(Me.ComboDirectorate) Then
         Me.ComboSpecialty.RowSource = "SELECT [Specialty Key], Specialty FROM tblSpecialty"
     ElseIf Not IsNull(Me.ComboDirectorate) Then
         Me.ComboSpecialty.RowSource = "SELECT [Specialty Key], Specialty FROM tblSpecialty WHERE Directorate = [ComboDirectorate]"
     End If
    
    Me.ComboSpecialty.Requery
    End Sub
    

    如果用户没有从第一个组合框 (ComboDirectorate) 中选择值,则所有值都显示在第二个组合框 (ComboSpecialty) 中。如果在第一个框中选择了一个值,则只有相关的值会显示在第二个组合框中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2014-07-21
      相关资源
      最近更新 更多