MS Access 2007:筛选组合框的选择列表

时间:2016-01-21 05:33:53

标签: ms-access combobox ms-access-2007

背景:我的表单的记录源是一个查询(" BigQuery"),它只是组合了几个相关的表。我正在设置组合框来编辑字段;这些组合框的控件源始终只是BigQuery的一个字段。其中一个字段是UnitType,另一个是UnitSubType。 UnitSubType有大约100个不同的条目,但是当与特定的UnitType配对时,其中许多条目没有上下文意义:如果UnitType =" Car&#34 ;,那么UnitSubType =" 18 wheeler"没有意义,我很快就不会给客户犯错误的机会。

问题,A部分:当用户在表单上选择UnitType的值时,我想将UnitSubType的组合框限制为已与数据库中的UnitType值配对的UnitSubType值。这是怎么做到的?

示例:如果一个或多个记录实例包含UnitType =" truck"和" UnitSubType =" 18 wheeler"已经存在于表中,然后假设用户已选择" truck"在UnitType的组合框中,UnitSubType的组合框中显示的选项之一应该是" 18 wheeler"。

问题,B部分:我还希望用户能够通过在组合框中输入新的UnitSubType来添加新的UnitSubType:如果用户已选择" truck"在UnitType的组合框中,手动输入"平板"在UnitSubType的组合框中,编辑后的记录应该有" flatbed"在UnitSubType和未来的编辑操作应该包括"平板"当UnitType为" truck"时,作为UnitSubType选择。在更简单的情况下设置"允许值列表编辑"到"是"处理这个问题,但我想确保在问题A部分提供的解决方案中提供此功能。

在SO中已经存在类似的问题线程,但我在Access中是一个小伙伴,我无法根据自己的需要推断出答案。对不起;请尽可能具体。

非常感谢你! 戴夫

1 个答案:

答案 0 :(得分:0)

我已经找到了一个我想分享的解决方案。访问很难描述,但我会列出规范的例外情况,并尝试以这种方式传达解决方案。

用于选择单位类型的第一个(主要)组合框:

  • 名称:CBUnitType
  • ControlSource:UnitType'''主表中的字段:MainTbl
  • 行来源:

    SELECT DISTINCT MainTbl.UnitType
    FROM MainTbl
    ORDER BY MainTbl.UnitType;
    
  • 装订栏:1

  • 允许值列表编辑:是
  • 锁定:否
  • 更新后:[事件过程]'''参见子程序:ComboBoxUnitType_AfterUpdate(),如下所示。

用于选择单位子类型的第二个(从属)组合框:

  • 名称:CBUnitSubType
  • ControlSource:UnitSubType'''主表中的字段:MainTbl
  • 行来源:ComboQueryUnitSubType'''由查询生成器构建,详情如下。
  • 装订栏:1
  • 允许值列表编辑:是
  • 锁定:否

查询构建器对象:ComboQueryUnitSubType

SELECT DISTINCT [MainTbl].UnitSubType
FROM [MainTbl]
WHERE ((([MainTbl].UnitType)=[Forms]![Unit Editor]![UnitType]))
ORDER BY [MainTbl].UnitSubType;

通过为组合框中的“更新后事件”[事件过程]“CBUnitType”选择“[事件过程]”创建的VBA子例程.VBA子例程自动放置在VBA环境中名为的模块中的Microsoft Office Access Class Objects文件夹中: “Form_Unit Editor”。子程序名称也预先选择为:“ComboBoxUnitType_AfterUpdate()”几乎可以肯定,如果你改变这些名称中的任何一个,那么链接就会破坏。模块中的VBA代码是:

Option Compare Database
Option Explicit

Private Sub ComboBoxUnitType_AfterUpdate()
    Forms![Unit Editor]![ComboBoxUnitSubType].Requery
    Forms![Unit Editor]![ComboBoxUnitSubType].Value = ""
End Sub

因此,效果如下:用户更新单元类型的组合框后,vba例程执行并重新查询单元子类型组合框的查询,然后任意获取单元子类型的.value参数单位子类型组合框并将其清除为空字符串。

我要感谢Blue Claw Database Design提供的慷慨教程。具体来说,重新查询组合框查询的VBA代码是一个救生员,并在他们的Dependent Drop Down List Box教程中详细说明为什么查询ComboQueryUnitSubType(指定为组合框的行源)不会自动重新运行每次用户选择组合框时都可以通过Access获取任何人的猜测。

我很抱歉这个冗长的问题和答案。我希望在不久的将来回到一些不错的简洁代码! 戴夫