Ms access 无法在连续窗体上设置ComboBox.RowSource
我在表单上设置某个组合框的行源时遇到问题(被视为连续表单,但在单表单模式下似乎也有一些问题) 组合框绑定到一个名为Ms access 无法在连续窗体上设置ComboBox.RowSource,ms-access,vba,continuous-forms,Ms Access,Vba,Continuous Forms,我在表单上设置某个组合框的行源时遇到问题(被视为连续表单,但在单表单模式下似乎也有一些问题) 组合框绑定到一个名为supplierID的字段,用于向用户显示一个项目的所有可能供应商的列表。我用于组合框的行源是: SELECT DISTINCT Suppliers.name, Suppliers.supplierID FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
supplierID
的字段,用于向用户显示一个项目的所有可能供应商的列表。我用于组合框的行源是:
SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
WHERE PartsSuppliers.partID = partID;
当我在查询设计器中查看此查询时(使用硬编码的partID),它工作正常-它为所选项目选择所有可能的供应商,并且不显示任何其他项目。但当我查看组合框中的项目时,它会显示PartsSuppliers
表中的所有供应商(该表只有两列,将零件映射到可能的供应商)
我还尝试在OnFocus事件中使用一些VBA设置组合框的行源(在中硬编码partID值),但它似乎从未更改行源。我使用的VBA代码是:
Private Sub supplierID_GotFocus()
Dim query As String
query = "SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID "
query = query & "FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID "
query = query & "WHERE (((PartsSuppliers.partID)=" & partID & "));"
supplierDropDown.RowSource = query
supplierDropDown.Requery
End Sub
我还尝试在一个记录集中打开该查询,然后将该记录集设置为组合框的记录集,但这也不起作用
我做错了什么,或者我是否应该寻找其他方法来进行正确的下拉
注意:我看到了,但接受的解决方案对我也不起作用。使用
OnEnter
和OnExit
事件更改行源代码
Private Sub supplierID_Enter()
supplierDropDown.RowSource = _
"SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
"FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID " & _
"WHERE PartsSuppliers.partID = " & partID & ";"
End Sub
Private Sub supplierID_Exit()
supplierDropDown.RowSource = _
"SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
"FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID;"
End Sub
我一直在为如何避免组合项受到限制并且很长一段时间找不到任何直接选项时在数据表中留下的“空白”而苦苦挣扎……直到现在
将所有可用选项保留在组合框中,但添加一个临时验证规则(使用OnCurrent)可以很好地完成此任务
希望这能防止像我这样长时间有人把头撞在桌子上。谢谢,这很有效。唯一的问题是,当另一个组合框具有焦点,并且行的supplierID不在下拉列表中时,组合框为空。你知道有什么办法解决这个问题吗?是的,我知道你会注意到的。这是一个不幸的副作用,当你进入组合时过滤WHERE子句造成的。换句话说,这是设计造成的。好吧,我最终使用了这个和中介绍的方法的组合,现在对我来说效果非常好。我反对可编辑的连续表单,如下所述:@David:感谢链接到该表单。我使用连续表单是因为它更有意义——用户可以看到所有要订购的商品,调整每个商品的数量,然后单击按钮生成订单。但是你的回答让我意识到,我也可以很容易地创建一个用于编辑该项目的弹出窗口,我可能会在不久的将来考虑实现它。