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

时间:2015-08-26 12:31:53

标签: ms-access access-vba ms-access-2010

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

我有一个未绑定的访问表单,其中包含4个级联组合框,这些组合框是查询的标准,而查询又会创建表单,依此类推。级联的工作方式与我期望的完美相同,表单生成就像按下按钮一样。但是,我有一个问题,我在一个组合框中进行选择,然后在单独的组合框中进行更改,完整的值列表不再显示在第一个组合框中。如果我点击组合框并退回那里的文本,就会发生同样的事情 修改
如果我在Combobox1中进行选择然后重新点击Combobox1,则仅显示我所做的选择而不是整个列表。看起来我在制作组合框时做错了,但不确定属性是什么控制它。

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

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

代码在其他框中重复,这些框也会改变。我希望如此,如果用户改变主意或误点击,那么他们可以选择返回并修复它。

修改

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

我还尝试根据组合框的各个查询创建一个Union查询来过滤,Combobox1用于Query1等的条件。我创建了它但是union查询仍然返回所有结果。

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。

1 个答案:

答案 0 :(得分:0)

除了为组合框提供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