无法在连续表单上设置ComboBox.RowSource

时间:2009-11-05 03:52:25

标签: ms-access vba continuous-forms

我无法在我的表单上设置某个组合框的行源(看作连续表单,虽然我在单表单模式下似乎也遇到了一些问题)。

组合框绑定到名为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,但是那个被接受的解决方案对我来说也不起作用。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我一直在努力避免如何避免空白'一旦组合项目受到限制,很长一段时间内无法找到任何直接的选项......直到现在![/ p>

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

希望这可以防止有人在我的桌子上敲打他们的头。