表链接表单上的 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 绑定组合框的主要内容,如果未能解决你的问题,请参考以下文章