我正在使用MS Access 2010来存储有关我们医院进行的审核的记录。我正在尝试创建一个表单,根据所选的下拉选项过滤审核。
我希望专业组合框从Directorate级联,所以如果我选择“家庭和公共卫生”理事会,只有该理事会内的专业出现在下面的组合框中。
我的ComboDirectorate行来源是SELECT [tblDirectorate]。[董事会密钥],[tblDirectorate]。[董事会] 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) & "' " & _
但是根据所选择的董事会,它仍然没有列出专业。
答案 0 :(得分:0)
我知道组合框已损坏,我不得不创建新的组合框。但是,首先检查每个组合框的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
请注意,使用查找别名的级联组合框在连续或数据表形式中效果不佳。
在命名约定中不建议使用空格或标点符号/特殊字符(仅限下划线异常)。
答案 1 :(得分:0)
使用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)中。如果在第一个框中选择了一个值,则只在第二个组合框中显示相关值。