表链接表单上的 MS Access 绑定组合框

Posted

技术标签:

【中文标题】表链接表单上的 MS Access 绑定组合框【英文标题】:MS Access bound combobox on table linked form 【发布时间】:2011-08-01 11:53:32 【问题描述】:

我目前有一个 2003 MS Access 数据库,它有一个表单,其中记录集基于一个表。此表单上还有一个组合框,它具有绑定表中某个字段的控制源。记录集是从另一个表中提取所有可用“服务”的查询的结果,所选“服务”的 ID 存储在表单绑定表中。 Combobox 有三列,列宽定义为 0cm,1cm,1cm,第 1 列是绑定 (ID) 列。

这允许我从下拉列表中选择“服务”并输入它,服务的 ID 存储在表中。自然地,这个表单中可以有很多行,这些行与表中的行相关联。

这很好用而且很棒。但是,现在需要此下拉列表中的值基于另一个字段。因此,下拉菜单中可以有几组“服务”,而不是一组“服务”,它们将基于另一个组合框出现。

我已经设法通过修改此服务下拉列表的记录集查询以考虑其他字段,然后在服务列表组合框的 onenter() 事件上重新查询自身(servicelist.requery ()) 但是有一个障碍,如果我在表单中有五行,每个服务列表将基于当前行的其他字段,而不是其各自的字段,导致组合框被空白。这不会影响基础表,但是很烦人。

有什么建议吗?

我尝试将“列表限制”属性设置为“否”,但是当组合框中的第一个字段(即绑定字段)的宽度为 0CM 时,这无法完成。当我将其设置为不等于 0CM 时,此组合框的显示值将变为 ID 字段,这不是我想要的。

【问题讨论】:

【参考方案1】:

我在这些情况下使用的解决方法是添加第二个绑定组合框。第二个组合框与第一个组合框完全相同,但有一些重要区别。

第一个组合框(用于显示)

z 顺序的顶部(通过置于前面设置) 限制较少的行源(即,不基于任何其他当前字段的值) 输入:=[OtherCombo].[SetFocus]

第二个组合框(用于编辑)

z 顺序的底部(通过 Send to Back 设置) 基于其他一些控件(例如 CategoryControl)限制行源 Rowsource 会根据表单的当前事件进行更新 Rowsource 在 CategoryControl 的 AfterUpdate 事件中得到更新

所以第一个组合框永远不会被空白,因为 RowSource 的限制较少。但是,第二个组合框可让您控制用户根据其他字段选择的值。

如果您为每个组合框设置不同的背景色,那么发生的情况就很明显了。

【讨论】:

【参考方案2】:

您需要在这两个事件中重新查询它,而不是使用过滤后的组合框的 OnEnter 事件:

    表单的 OnCurrent。

    第一个组合框的 AfterUpdate 事件。

这是一个 Access 常见问题解答(级联组合框),并不难。您只需要仔细考虑您要尝试做什么-您只想在第一个组合框中的值更改时更改第二个组合框的内容,这就是您在两个事件中这样做的原因上面,而不是在第二个组合框的 OnEnter 中(当没有理由这样做时会触发)。

编辑:

我错过了连续形式方面。在我看来,这正是连续表单根本不可编辑的情况类型。相反,我建议将连续表单设置为记录的静态列表,并将另一个带有 LinkMaster/LinkChild 的子表单绑定到连续表单的 PK 字段,并使用其他表单(单个表单)来编辑详细信息。您将使用连续表单来选择记录,并使用单个表单来显示完整的详细信息并进行实际编辑。

【讨论】:

OP 正在尝试以连续形式实现这一点。这就是他遇到问题的原因,也是我提供“隐藏”组合框破解作为解决方案的原因。

以上是关于表链接表单上的 MS Access 绑定组合框的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2010:未绑定的组合框不会更新

如何使用多个组合框过滤 MS Access 中的数据?

数据表中的 MS-Access 未绑定组合框?

更新取消事件之前的 MS Access 不适用于未绑定的组合框

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

将下拉菜单链接到 MS Access 中的新表单