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

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

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

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

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

有什么建议吗?

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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      1. 表单的 OnCurrent。

      2. 第一个组合框的 AfterUpdate 事件。

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

      编辑:

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

      【讨论】:

      • OP 正在尝试以连续形式实现这一点。这就是他遇到问题的原因,也是我提供“隐藏”组合框破解作为解决方案的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2010-09-09
      • 1970-01-01
      • 2016-03-09
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多