【发布时间】:2015-08-27 22:32:15
【问题描述】:
我不完全确定如何通过谷歌或这个网站搜索这个问题,所以如果这是一个重复的问题,让我提前道歉。
我有一个未绑定的访问表单,其中包含 4 个级联组合框,这些组合框是查询的条件,而查询又会创建一个表单,依此类推。级联像我期望的那样完美地工作,并且表单生成就像它应该在单击按钮时一样。但是,我有一个问题,我在一个组合框中进行选择,然后在单独的组合框中进行更改,完整的值列表不再显示在第一个组合框中。如果我单击组合框并退格那里的文本,也会发生同样的事情。
编辑
如果我在 Combobox1 中进行选择,然后重新单击 Combobox1,则只会显示我所做的选择,而不是整个列表。看来我在制作组合框时做错了,但不确定是什么属性控制它。
我正在使用 AfterUpdate 事件重新查询框以使它们级联。所以看起来像
Private Sub Combobox1 AfterUpdate()
Me.Combobox2.Requery
Me.Combobox3.Requery
Me.Combobox4.Requery
并且代码在其他框中重复,这些框也会改变。我想要它,所以如果用户改变主意或点击错误,那么他们可以选择返回并修复它。
编辑
我尝试过的一个解决方案是在 AfterUpdate 事件中也将值设置为 Null。但是我意识到,如果我只需要更改一个选择,我不希望我的其余值消失并重新选择它们。
我还尝试根据要过滤的组合框的单个查询创建联合查询,组合框 1 用于 Query1 的条件等。我创建了它,但联合查询仍然返回所有结果。
编辑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。
【问题讨论】:
-
您使用什么 SQL 来填充组合框?由于它们都是相互关联的,因此很可能这就是问题所在。
-
同意 jhTuppeny,问题听起来像是在您的组合框的源查询中。您是否使用 4 个单独的记录源?还是一个适合所有 4 个?你能显示查询吗?
-
我知道这可能不是最有效(或正确)的方式,但一切都基于一个查询。查询基于一个使用 4 个表字段作为条件的表。我相信的 SQL 显示了 4 个组合框可能具有的所有可能组合。这没有得到验证,因为我自己没有输入 SQL。我不知道如何使用 SQL,这也可能是问题的一部分
-
如果它告诉你什么,SQL 代码的 WHERE 部分有 23 行长以适应
-
不管是什么问题,它看起来都在 SQL 中。发布这是修复的第一阶段。
标签: ms-access vba ms-access-2010