级联组合框导致下一条记录中的空字段

时间:2010-04-01 11:44:32

标签: ms-access ms-access-2007

我遇到了级联组合框的问题。组合框一切正常,值正确填充。

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;

两个组合框都有相同的控制源。

一切正常,花花公子在记录之间移动,方框显示每条记录的正确字段。

当我使用第一个组合框,然后在第二个组合框中选择适当的选项时,一切都在特定记录上运行良好。

然而,当我移动到下一个记录时,第二个组合框中的值都是空的。如果我关闭表单并重新打开它,并避免使用级联组合框,当我在记录之间移动时,所有值都是正确的。

以某种方式使用级联组合框会与辅助组合框的行源发生冲突。

希望很清楚!一直在四处寻找答案但却找不到任何答案。

任何帮助将不胜感激。

由于

诺尔

1 个答案:

答案 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

这使得代码更易于阅读,并且如果需要,还可以更容易地更改行源,因为您只需要编辑常量。