【问题标题】:MS-Access 2013; Change combobox options based on record data in multi-record formMS-Access 2013;根据多记录形式的记录数据更改组合框选项
【发布时间】:2025-12-22 10:35:07
【问题描述】:

我有一个包含多条记录的表单,每行一条,从表中提取。我每行有 2 个 ComboBox 控件。第一个 ComboBox 的选项链接到类别表。第二个 ComboBox 的选项需要链接到第一个 ComboBox 的子类别。

我尝试在设计时在行源中使用 WHERE 语句,该语句生成了所有子类别。

我已经尝试在 ComboBox 类别的更改事件上使用 WHERE 语句和重新查询命令,它为最后更改的类别生成子类别。这是一个问题,因为所有行都具有相同的选项,而不是基于该记录/行的类别的选项。

我需要的是每行查询子类别/类别映射表并根据该行的类别选择过滤结果。这可能吗?如果是这样,如何做到这一点?我不怕使用 VBA 来获得我需要的结果。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    在窗体的 On_Current 事件中,可以根据第一个组合框的列值动态更改第二个组合框的行源。您可能还需要在第一个组合框的 after_update 事件上执行此操作。

    类似的东西

        Select Case Me.cboCategory
    Case "Category 1"
        Me.cboSubCategory.RowSource = "qryCat1Subclass"
    Case "Category 2"
        Me.cboSubCategory.RowSource = "qryCat2Subclass"
    Case Else
        Me.cboSubCategory.RowSource = ""
    End Select
    

    我没有两个组合框,只有一个,但它的内容必须基于另一个字段中的值。我就是这样做的。

    【讨论】:

    • 这适用于动态过滤,但是具有不同类别的行在组合框中将没有文本,直到选择了具有相同类别的行。
    • @DevLocus。您的类别和子类别绑定字段吗?如果他们是它应该工作。如果不是,则连续表格仅在所有行上显示当前记录中的值。 (如果你想做更多花哨的事情,那就真的很痛苦)。我完全按照我所说的去做,(尽管我没有将组合框称为我标记为 Me.cboCategory 的字段,在我的例子中它是来自数据库的文本字段)
    • 当然,Case Else 只是一个退出条款。您应该为所有可能的值添加更多 Case "Category n" 元素。
    • 再想一想。 cboSubCategory 字段应该允许不在 ComboBox 列表中的值(只是为了处理您刚才提到的情况)。
    • 不幸的是,要完成这项工作,我需要在组合框中显示子类别的 ID 号而不是名称,因为绑定列必须对“限制列表”属性可见,才能为“否”。