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 - 构建一个组合框,该组合框根据先前的组合框选择返回多个值的主要内容,如果未能解决你的问题,请参考以下文章