MS-Access 2013;根据多记录形式的记录数据更改组合框选项

Posted

技术标签:

【中文标题】MS-Access 2013;根据多记录形式的记录数据更改组合框选项【英文标题】:MS-Access 2013; Change combobox options based on record data in multi-record form 【发布时间】:2016-02-11 20:44:20 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案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 号而不是名称,因为绑定列必须对“限制列表”属性可见,才能为“否”。

以上是关于MS-Access 2013;根据多记录形式的记录数据更改组合框选项的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ADO 记录集字段将图片加载到 MS-Access Image 控件中?

记录集到表?

为啥要克隆 MS-Access 记录集?

MS-Access 2007:查询与至少有一条记录符合指定条件的个人相关的所有记录

ms-access:仅显示特定日期内记录的报告

在 Excel 中显示 MS-Access 记录的富文本格式