级联组合框不更新第二个框选项
Cascading Combo box doesn't update 2nd box options
我正在使用 MS Access 2010 来存储有关在我们医院进行的审计的记录。我正在尝试创建一个表单,它将根据下拉选项过滤审核 selected.
我希望专业组合框从 Directorate 级联,所以如果我 select "Family and Public Health" Directorate,只有该 Directorate 内的专业才会出现在下面的组合框中。
我的 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
这似乎对列出的专业没有任何影响。
我已经尝试按照
输入“ ”
WHERE Directorate = '" & Nz(Me.ComboDirectorate) & "' " & _
但它仍然没有根据理事会 selected.
列出专业
我知道组合框会损坏,我必须创建新的组合框。但是,首先检查是否正确设置了每个组合框的 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
请注意,带有查找别名的级联组合框在连续或数据表形式中效果不佳。
建议在命名约定中不要使用空格或 punctuation/special 个字符(下划线除外)。
根据 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
如果用户没有select 第一个组合框 (ComboDirectorate) 中的值,则所有值都显示在第二个组合框 (ComboSpecialty) 中。如果在第一个框中输入了一个值 select,则第二个组合框中仅显示相关值。
我正在使用 MS Access 2010 来存储有关在我们医院进行的审计的记录。我正在尝试创建一个表单,它将根据下拉选项过滤审核 selected.
我希望专业组合框从 Directorate 级联,所以如果我 select "Family and Public Health" Directorate,只有该 Directorate 内的专业才会出现在下面的组合框中。
我的 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
这似乎对列出的专业没有任何影响。
我已经尝试按照
WHERE Directorate = '" & Nz(Me.ComboDirectorate) & "' " & _
但它仍然没有根据理事会 selected.
列出专业我知道组合框会损坏,我必须创建新的组合框。但是,首先检查是否正确设置了每个组合框的 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
请注意,带有查找别名的级联组合框在连续或数据表形式中效果不佳。
建议在命名约定中不要使用空格或 punctuation/special 个字符(下划线除外)。
根据 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
如果用户没有select 第一个组合框 (ComboDirectorate) 中的值,则所有值都显示在第二个组合框 (ComboSpecialty) 中。如果在第一个框中输入了一个值 select,则第二个组合框中仅显示相关值。