1

我在我的表单上设置某个组合框的行源时遇到问题(被视为连续表单,尽管我在单表单模式下似乎也有一些问题)。

组合框绑定到一个名为 的字段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 设置组合框的 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,但这也不起作用。

我做错了什么,还是我应该考虑其他一些方法来做出正确的下拉?

注意,我已经在 Access 中看到了连续形式的组合框的自定义行源,但是该接受的解决方案也对我不起作用。

4

2 回答 2

3

使用OnEnterOnExit事件更改您的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
于 2009-11-05T04:34:00.967 回答
0

一旦组合项目受到限制并且很长一段时间找不到任何直接的选项......直到现在,我一直在努力避免在数据表中留下“空白”!

将所有可用选项保留在 Combo 框中,但使用 OnCurrent 添加临时验证规则,可以完美地解决问题。

希望这可以防止有人像我一样把头撞在桌子上。

于 2018-04-24T11:20:55.813 回答