代码之家  ›  专栏  ›  技术社区  ›  a_m0d

无法在连续窗体上设置ComboBox.RowSource

  •  1
  • a_m0d  · 技术社区  · 16 年前

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

    组合框绑定到一个名为 supplierID ,表示向用户提供一个项目的所有可能供应商的列表。我用于组合框的行源是:

    SELECT DISTINCT Suppliers.name, Suppliers.supplierID
    FROM Suppliers
    INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID 
    WHERE PartsSuppliers.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
    

    我还尝试在记录集中打开该查询,然后将该记录集设置为组合框的记录集,但这也不起作用。

    我做错了什么,或者有什么其他方法可以让我正确的下拉列表?

    注意,我见过 Custom row source for combo box in continuous form in Access 但是这个公认的解决方案对我也不起作用。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Robert Harvey    16 年前

    使用 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
    
        2
  •  0
  •   ProgRocks    7 年前

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

    将所有可用选项保留在组合框中,但使用oncurrent添加临时验证规则,可以完美地完成这一操作。

    希望这样可以防止有人在我的办公桌上敲他们的头。