Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 无法在连续窗体上设置ComboBox.RowSource_Ms Access_Vba_Continuous Forms - Fatal编程技术网

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:感谢链接到该表单。我使用连续表单是因为它更有意义——用户可以看到所有要订购的商品,调整每个商品的数量,然后单击按钮生成订单。但是你的回答让我意识到,我也可以很容易地创建一个用于编辑该项目的弹出窗口,我可能会在不久的将来考虑实现它。