【问题标题】:Access form cascading combo box shows nothing in drop down menu访问表单级联组合框在下拉菜单中不显示任何内容
【发布时间】:2026-01-27 21:30:01
【问题描述】:

我正在尝试创建一个带有级联组合框的数据输入表单以限制用户选项。我让它工作了一段时间,然后它决定退出。不过,我可能只是想多了。

我将需要设置大约 50 个盒子。第一个是一对多。我得到了第一个正确添加到新记录的框。当我到达第二个组合框时,下拉菜单什么也没有显示。直到我在标准中输入 [forms]![NewSpecForm]![cboBoxSize] 之前都可以。如何创建真正永久有效的级联组合框?

我的第三个组合框是多对多的,所以我为此创建了一个连接表。我找到了几个关于如何加入表以进行级联组合框的教程,一旦我开始工作,第一个和第二个框不会将正确的信息添加到新记录中。

如果我不理会 AfterUpdate 并单独使用第二个框,它会将 ID 添加到新记录而不是名称。我该如何解决?

【问题讨论】:

    标签: mysql ms-access combobox cascadingdropdown ms-access-2016


    【解决方案1】:

    首先,让我们确保我们了解“级联组合框”背后的概念。逻辑以这样一种方式运行,即在您从 Combo1 中进行选择后,Combo2 中可用的选项将发生变化,因此它们是仅与 Combo1 相关的项目。同样,当我们从 Combo2 中选择一个项目后,Combo3 中的项目将仅是与用户在 Combo2 中选择的项目相关的项目。

    所以,首先,除了 Combo1 之外的每个组合框都应该是空的,或者应该与 Combo1 的默认值相关。无论哪种方式都可以。

    接下来,在 Combo1 的 AfterUpdate 事件中,您应该有如下内容:

    Me.cboCombo2.RowSource = "SELECT MyFieldNames " & _
                               "FROM tblMyTable " & _
                               "WHERE SomeID = " & Nz(Me.cboCombo1) & _  
                               "ORDER BY SomeValue"
    Me.cboCombo2.Requery
    

    显然,MyFieldNames、tblMyTable 和所有其他值将取决于您实际查找的内容、源表/查询名称和字段名称等...

    好的,所以现在 Combo2 应该填充仅与您在 Combo1 中选择的内容相关的数据,因为我们在上面的 SQL 中使用 Combo1 作为过滤器。

    如果看起来没问题,对 Combo3 执行或多或少完全相同的操作。您可能需要过滤来自两个组合的值,或者您可能只在 Combo2 中使用该值就可以逃脱,具体取决于您的数据集。

    起泡、冲洗、重复。如果你有 50 个连击,我猜你需要这样做 50 次,但就是这样完成的。

    更多参考,请看这篇文章:http://www.fmsinc.com/microsoftaccess/forms/combo-boxes/cascading.html

    【讨论】:

    • 我有级联部分工作。谢谢!我一直遇到这个问题:当我添加这条新记录时,它添加到的表只显示每个选择的 ID 而不是名称。
    • 在规范化数据库中,这就是您想要的。但是,如果您确实想使用名称,那么只需将绑定列属性(右键单击组合,选择属性并查看数据选项卡)更改为包含名称的任何字段。它默认为 1,因此如果您的组合同时包含 ID 和名称,则将其更改为 2。
    • 我这样做了,现在第二个组合框不会在下拉菜单中显示任何内容。我添加了只选择了第一个的记录并且它有效。现在我必须弄清楚如何让第二个也能正常工作。
    • 尝试在 AfterUpdate 事件中引用 Combo1.Value。如果您的组合有 2 个字段,则 Combo1.Value 和 Combo1.Text 之间存在差异。您可能必须使用“立即”窗口设置断点并弄乱一些东西。您可以在 RowSource 行放置一个断点,然后在即时窗口中输入诸如 ?Combo1、?Combo1.Value、?Combo1.Text 等内容,然后查看它返回的内容,直到找到正确的属性。
    • 我发现了问题!我引用的是 ID 而不是第一个的名称。这就是为什么它一直只返回数值。