我目前有一个2003 MS Access数据库,它有一个Form,其中记录集基于表。此表单上还有一个Combobox,它具有绑定表中某个字段的控制源。记录集是查询的结果,该查询从另一个表中提取所有可用的“服务”,所选“服务”的ID存储在表单绑定表中。 Combobox有三列,列宽定义为0cm,1cm,1cm,列1是绑定(ID)列。
这允许我从下拉列表中选择“服务”并输入,服务的ID存储在表中。当然,这个表单中可以有许多行,这些行与表中的行相关联。
这很好用,很棒。但是,现在要求此下拉列表中的值基于另一个字段。因此,在下拉列表中可以存在多组“服务”,而不是拥有一组“服务”,这些服务将基于另一个组合框出现。
我设法通过修改此服务的记录集查询下拉以考虑其他字段然后在服务列表组合框的onenter()事件上重新查询本身(servicelist.requery)。 ())然而有一个障碍,如果我在表单中有五行,每个服务列表将基于当前行其他字段,而不是其相应的一个,导致组合框被消隐。这不会影响基础表,但它很烦人。
有什么建议吗?
我已经尝试将“limit to list”属性设置为“No”但是当组合框中的第一个字段(它是绑定字段)的宽度为0CM时,无法完成此操作。当我将其设置为不等于0CM时,此组合框的显示值将成为ID字段,这不是我想要的。
答案 0 :(得分:1)
我在这些情况下使用的解决方法是添加第二个绑定组合框。第二个组合框与第一个组合框完全相同,但有一些重要的区别。
第一个组合框(用于显示)
=[OtherCombo].[SetFocus]
第二个组合框(用于编辑)
因此,第一个组合框永远不会被删除,因为RowSource的限制较少。但是,第二个组合框允许您根据其他字段控制用户选择的值。
如果您使用不同的BackColor设置每个组合框,则会发现正在发生的事情。
答案 1 :(得分:0)
您需要在这两个事件中重新查询它,而不是使用已过滤的组合框的OnEnter事件:
表格的OnCurrent。
第一个组合框的AfterUpdate事件。
这是一个Access FAQ(级联组合框),并不是那么难。你只需要仔细考虑你正在尝试做的事情 - 你只想在第一个组合框中的值发生变化时更改第二个组合框的内容,这就是你在两个事件中这样做的原因上面,不是在第二个组合框的OnEnter(当没有理由这样做时会触发)。
编辑:
我错过了连续形式方面。在我看来,这正是连续形式根本不可编辑的情况。相反,我建议将连续表单作为记录的静态列表,并将另一个子表单与LinkMaster / LinkChild绑定到连续表单的PK字段,并使用其他表单(单个表单)来编辑详细信息。您可以使用连续表单来选择记录,单个表单可以显示完整的详细信息并进行实际编辑。