我遇到了级联组合框的问题。组合框一切正常,值正确填充。
Private Sub cmbAdjComp_AfterUpdate()
Me.cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID,
AdjusterCompanyOffice.Address1,
AdjusterCompanyOffice.Address2,
AdjusterCompanyOffice.Address3,
AdjusterCompanyOffice.Address4,
AdjusterCompanyOffice.Address5 FROM" & _
" AdjusterCompanyOffice WHERE
AdjusterCompanyOffice.AdjCompID = " & Me.cmbAdjComp.Column(1) & _
" ORDER BY AdjusterCompanyOffice.Address1"
Me.cboAdjOff = Me.cboAdjOff.ItemData(0)
End Sub
辅助组合框有一个行源查询:
SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1,
AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3,
AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM
AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1;
两个组合框都有相同的控制源。
一切正常,花花公子在记录之间移动,方框显示每条记录的正确字段。
当我使用第一个组合框,然后在第二个组合框中选择适当的选项时,一切都在特定记录上运行良好。
然而,当我移动到下一个记录时,第二个组合框中的值都是空的。如果我关闭表单并重新打开它,并避免使用级联组合框,当我在记录之间移动时,所有值都是正确的。
以某种方式使用级联组合框会与辅助组合框的行源发生冲突。
希望很清楚!一直在四处寻找答案但却找不到任何答案。任何帮助将不胜感激。
由于
诺尔
答案 0 :(得分:0)
导航到下一条记录时组合框为空的原因是因为您将NotInList设置为TRUE(这是您想要的),但是当您到达记录时,rowsource已被过滤为不包括存储在组合框绑定的字段中的值。因此,它是空白的 - 值存在,但无法显示,因为它不在列表中。
要解决此问题,您需要清除第二个组合框上的过滤器。为此,在表单的OnCurrent事件中,将筛选后的组合框的rowsource设置为未筛选:
Me!cboAdjOff.RowSource = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice ORDER BY AdjusterCompanyOffice.Address1"
我通常通过在表单模块的顶部创建两个常量来处理这个问题,一个用于SELECT语句,一个用于ORDER BY:
cstrRecordsourceSelect = "SELECT AdjusterCompanyOffice.ID, AdjusterCompanyOffice.Address1, AdjusterCompanyOffice.Address2, AdjusterCompanyOffice.Address3, AdjusterCompanyOffice.Address4, AdjusterCompanyOffice.Address5 FROM AdjusterCompanyOffice"
cstrRecordsourceOrderBy = "ORDER BY AdjusterCompanyOffice.Address1"
然后它更容易处理。在OnCurrent中它看起来像这样:
Me!cboAdjOff.RowSource = cstrRecordsourceSelect & " " & cstrRecordsourceSelect
...并在第一个组合框的AfterUpdate中:
Me!cboAdjOff.RowSource = cstrRecordsourceSelect & _
"WHERE AdjusterCompanyOffice.AdjCompID = " & Me!cmbAdjComp.Column(1) & _
" " & cstrRecordsourceSelect
这使得代码更易于阅读,并且如果需要,还可以更容易地更改行源,因为您只需要编辑常量。