MS Access - 构建一个组合框,该组合框根据先前的组合框选择返回多个值

Posted

技术标签:

【中文标题】MS Access - 构建一个组合框,该组合框根据先前的组合框选择返回多个值【英文标题】:MS Access - Building a combobox that returns multiple values based on previous combobox selection 【发布时间】:2018-03-13 01:30:57 【问题描述】:

我有两个共享研究方案标题(字符串)的表。在一个表“Study Events”中,我存储了与每个研究方案相关的报销信息,但我们关心的是“Protocol”和“EventDefinition”这两列。在此表中,我可以为单个研究方案定义多个“事件”。

在另一个表“研究访问和互动”中,我有与研究事件发生时间相关的信息,并开发了一个表格供最终用户输入该数据。在这种形式中,有一个组合框“研究协议”,它允许用户从数据库中唯一的协议列表中进行选择。然后我有第二个组合框,我想用所选协议可用的“EventDefinition”字段填充它。

我正在为我的 RowSource 语句使用以下查询:

SELECT [Study Events].EventDefinition
FROM [Study Events]
WHERE Protocol= [Me].[Study Protocol];

当我在编辑器中将 [Study Protocol] 定义为协议名称之一时,查询会返回正确的信息。但是当我以实际形式尝试时,没有任何返回。

如果在 ControlSource 表中将 Combobox 值定义为字符串,我是否使用了不正确的语法来引用它?

【问题讨论】:

删除[Me]. 它只适用于VBA,不需要引用表单。 当我在 RowSource SQL 编辑器中单击视图时,删除 [Me] 有效,但在表单本身中时不会更新。我需要修改“AfterUpdate”或类似内容吗? 【参考方案1】:

要根据第一个组合框的选择过滤第二个组合框,您需要一些 VBA 代码来在第一个组合框更改时刷新第二个组合框。

下面假设第一个组合框名称是cboStudyProtocol,第二个是cboEventDefinition

cboEventDefinition 的RowSource 应该类似于以下内容:

SELECT [Study Events].EventDefinition
FROM [Study Events]
WHERE Protocol = [cboStudyProtocol];

然后,为第二个组合框添加一个事件:

Private Sub cboStudyProtocol_AfterUpdate()
    cboEventDefinition.Requery
End Sub

当第一个组合框中的选择发生变化时,这会更新第二个组合框中的值列表。

【讨论】:

我想你会发现即使第一个组合框被绑定了,仍然需要代码来重新查询第二个组合框。 @June7 - 不知道我在回忆什么,但我的记忆让我失望了。在绑定控件的情况下,我已经删除了关于自动重新查询的错误语句。 另外,我推荐第一个组合框的 AfterUpdate 事件。

以上是关于MS Access - 构建一个组合框,该组合框根据先前的组合框选择返回多个值的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 组合框使用两个主键设置记录

来自组合框的 MS Access Like 查询

MS-Access 表单组合框不能限制粘贴的记录

MS Access 组合框“#Name?”错误

如何更新 ms access vba 中的多值组合框?

MS Access:组合框列顺序问题