Ms access Access窗体中的级联组合框在进行选择后不显示所有可用选项

Ms access Access窗体中的级联组合框在进行选择后不显示所有可用选项,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我不完全确定如何通过谷歌或这个网站搜索这个问题,所以如果这是一个重复的问题,请允许我提前道歉 我有一个未绑定的访问表单,它有4个层叠的组合框,这些组合框是查询的条件,查询将创建一个表单,依此类推。级联像我期望的那样工作得很好,表单的生成就像点击按钮一样。但是,我有一个问题,我在一个组合框中进行选择,然后在单独的组合框中进行更改,完整的值列表不再显示在第一个组合框中。如果我在组合框中单击并将文本退格,也会发生同样的情况。 编辑 如果我在Combobox1中进行选择,然后重新单击Combox1,则只

我不完全确定如何通过谷歌或这个网站搜索这个问题,所以如果这是一个重复的问题,请允许我提前道歉

我有一个未绑定的访问表单,它有4个层叠的组合框,这些组合框是查询的条件,查询将创建一个表单,依此类推。级联像我期望的那样工作得很好,表单的生成就像点击按钮一样。但是,我有一个问题,我在一个组合框中进行选择,然后在单独的组合框中进行更改,完整的值列表不再显示在第一个组合框中。如果我在组合框中单击并将文本退格,也会发生同样的情况。
编辑
如果我在Combobox1中进行选择,然后重新单击Combox1,则只显示我所做的选择,而不是整个列表。看起来我在创建组合框时犯了一些错误,但不确定是什么属性控制了它

我正在使用AfterUpdate事件重新查询这些框,使它们层叠。看来

Private Sub Combobox1 AfterUpdate()
Me.Combobox2.Requery
Me.Combobox3.Requery
Me.Combobox4.Requery
代码在其他框中重复,这些框也会改变。我希望这样,如果用户改变主意或错误点击,那么他们可以选择返回并修复它

编辑

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

我还尝试基于要筛选的combobox的单个查询创建联合查询,Combobox1用于Query1等的条件。我创建了它,但联合查询仍然返回所有结果

Edit2

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事件,因为它是在以另一种形式显示结果之前进行的最后一次选择。不需要影响其他组合框中发生的事情


您使用什么SQL来填充组合框?因为它们都是相互关联的,所以问题可能就在这里。同意jhTuppeny的说法,问题听起来像是在你的组合框源问题中。您是否使用4个单独的记录源?还是四个人一个?你能展示一下这些查询吗?我知道这可能不是最有效(或正确)的方式,但一切都基于一个查询。查询基于一个表,使用4个表字段作为条件。我相信SQL显示了4个组合框可能具有的所有可能的组合。由于我自己没有键入SQL,因此未对其进行验证。我也不知道如何使用SQL,这可能也是问题的一部分。如果它告诉你什么的话,SQL代码的WHERE部分有23行长,以适应任何问题,它看起来像是在SQL中。发布是修复的第一个阶段。
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