访问表单中的级联组合框在做出选择后不显示所有可用选项

Cascading Comboboxes in Access Form Not Showing all available options after selections have been made

我不太确定如何通过 Google 或本网站搜索此问题,所以如果这是重复问题,请让我提前致歉。

我有一个未绑定的访问表单,其中包含 4 个级联组合框,这些组合框是查询的条件,而查询又会创建一个表单,依此类推。级联效果如我所料,并且表单的生成方式与单击按钮时预期的一样。但是,我有一个问题,我在一个组合框中进行选择,然后在单独的组合框中进行更改,完整的值列表不再显示在第一个组合框中。如果我单击组合框并退格那里的文本,也会发生同样的事情。
编辑
如果我在 Combobox1 中进行选择,然后重新单击 Combobox1,则只会显示我所做的选择,而不是整个列表。看来我在制作组合框时做错了,但不确定 属性 控制的是什么。

我正在使用 AfterUpdate 事件重新查询框,使它们级联。所以它看起来像

Private Sub Combobox1 AfterUpdate()
Me.Combobox2.Requery
Me.Combobox3.Requery
Me.Combobox4.Requery

并且代码在其他也会更改的框中重复出现。我想要它,所以如果用户改变主意或误点击,那么他们可以选择返回并修复它。

编辑

我尝试过的一个解决方案是在 AfterUpdate 事件中也将值设置为 Null。但是我意识到,如果我只需要更改一个选择,我不希望我的其余值消失并重新选择它们。

我也曾尝试根据要过滤的组合框的单个查询创建联合查询,Combobox1 用于 Query1 等的条件。我创建了它,但联合查询仍然 returns 所有结果。

编辑2

SELECT tblRawData.[Body No], tblRawData.Supplier, tblRawData.[Part Content], tblRawData.[Defect Desc], tblRawData.DateAdded, Left([tblRawData].[Body No],2) AS ModelCode, tblRawData.ThreePanelStatus, tblRawData.Location, tblRawData.Main, tblRawData.Responsibility2, tblRawData.Responsibility1, tblRawData.[Repair Job1], tblRawData.[Repair Job2], tblRawData.[Trim In Time], tblRawData.[S/OFF Date], tblRawData.[Repair Memo], tblRawData.Responsible, tblRawData.Note
FROM tblRawData
WHERE (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus])) OR (((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null)) OR (((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null)) OR (((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null)) OR (((tblRawData.ThreePanelStatus)=[Forms]![frmTest]![cboSelectThreePanelStatus]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((Left([tblRawData].[Body No],2))=[Forms]![frmTest]![cboChooseModelCode]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND ((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((tblRawData.Supplier)=[Forms]![frmTest]![cboChooseSupplier]) AND (([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR (((tblRawData.[Body No])=[Forms]![frmTest]![cboChooseBodyNo]) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null)) OR ((([Forms]![frmTest]![cboChooseBodyNo]) Is Null) AND (([Forms]![frmTest]![cboChooseSupplier]) Is Null) AND (([Forms]![frmTest]![cboChooseModelCode]) Is Null) AND (([Forms]![frmTest]![cboSelectThreePanelStatus]) Is Null));

不确定如何让它显示得更清晰一些,但有一个 SQL 当前正在使用。

除了组合框的 AfterUpdate 事件之外,我还添加了一个将重新查询的 LostFocus 事件。现在,当用户返回到已经有值的组合框并将其删除,然后单击其他位置时,将显示所有需要的值。它可能不是完全有效的,但现在可以使用。代码如下。

注意:cboChooseBodyNo 没有 AfterUpdate 事件,因为它是在以另一种形式显示结果之前所做的最后选择。不需要影响其他组合框中发生的事情。

Private Sub cboChooseModelCode_AfterUpdate()
Me.cboChooseBodyNo.Requery
Me.cboSelectThreePanelStatus.Requery
End Sub

Private Sub cboChooseModelCode_LostFocus()
Me.Requery
End Sub

Private Sub cboChooseSupplier_AfterUpdate()
Me.cboChooseBodyNo.Requery
Me.cboSelectThreePanelStatus.Requery
End Sub

Private Sub cboChooseSupplier_LostFocus()
Me.Requery
End Sub

Private Sub cboSelectThreePanelStatus_AfterUpdate()
Me.cboChooseBodyNo.Requery
Me.cboChooseSupplier.Requery
Me.cboChooseModelCode.Requery
End Sub

Private Sub cboSelectThreePanelStatus_LostFocus()
Me.Requery
End Sub