我无法在我的表单上设置某个组合框的行源(看作连续表单,虽然我在单表单模式下似乎也遇到了一些问题)。
组合框绑定到名为supplierID
的字段,用于向用户显示项目的所有可能供应商的列表。我用于组合框的行源是:
SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
WHERE PartsSuppliers.partID = partID;
当我在查询设计器中查看此查询(带有partID硬编码)时,它工作正常 - 它选择所选项目的所有可能供应商,并且不显示任何其他项目。但是,当我查看组合框中的项目时,它会显示 all PartsSuppliers
表中的供应商(只有两列,将零件映射到可能的供应商) )。
我还尝试在OnFocus事件中使用一些VBA设置组合框的RowSource(对partID值进行硬编码),但它似乎永远不会改变RowSource。我使用的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
我还尝试在RecordSet中打开该查询,然后使用RecordSet作为组合框的RecordSet,但这也不起作用。
我做错了什么,或者是否有其他方法可以让我做出正确的下拉?
N.B。我见过Custom row source for combo box in continuous form in Access,但是那个被接受的解决方案对我来说也不起作用。
答案 0 :(得分:3)
使用OnEnter
和OnExit
个活动更改RowSource
。
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
答案 1 :(得分:0)
我一直在努力避免如何避免空白'一旦组合项目受到限制,很长一段时间内无法找到任何直接的选项......直到现在![/ p>
保留组合框中的所有可用选项,但使用OnCurrent添加临时验证规则可以完美地完成这一操作。
希望这可以防止有人在我的桌子上敲打他们的头。