MS Access 2007:筛选组合框的选择列表
背景:我的表单的记录源是一个查询(“BigQuery”),它只是组合了几个相关的表。我正在设置组合框来编辑字段;这些组合框的控件源始终只是BigQuery的一个字段。其中一个字段是UnitType,另一个是UnitSubType。 UnitSubType有大约100个不同的条目,但是当与一个特定的UnitType配对时,它们中的许多没有上下文意义:如果UnitType =“Car”,那么UnitSubType =“18 wheeler”是没有意义的,而且我很快就不会给客户机会犯错误。部分A:当用户在窗体上为UnitType选择一个值时,我想将UnitSubType的组合框限制为已经与数据库中的UnitType值配对的那些UnitSubType值。这是如何完成的?例如:如果表中已经存在一个或多个包含UnitType =“truck”和“UnitSubType =”18 wheeler“的记录实例,则假设用户已经在组合框中选择了”truck“ UnitType在UnitSubType组合框中显示的选项之一应该是“18惠勒”MS Access 2007:筛选组合框的选择列表
问题,B部分:我还希望用户能够添加一个新的UnitSubType,只需在组合框中输入它即可框:如果用户已经在UnitType的组合框中选择了“卡车”并在UnitSubType的组合框中手动键入“平板”,则编辑的记录应该在UnitSubType中具有“平板”,并且未来的编辑操作应该包括“平板“作为UnitSubType选择,只要UnitType是”卡车“就可以了离子设置“允许值列表编辑”为“是”照顾了这一点,但我想确保此功能可用于问题A部分提供的解决方案。
在SO中也有类似的问题线程,但在Access中,我是这样一个noob,我一直无法推断出答案以适合我的需要。对不起;请尽可能具体。
非常感谢! 戴夫
我已经到达了我想分享的一个解决方案。访问很难描述,但我会列举例外情况并尝试以这种方式传达解决方案。
第一(主)组合框用于拾取单位类型:
- 名称:CBUnitType
- 控件:UNITTYPE '''在主表中的字段:MainTbl
-
行来源:
SELECT DISTINCT MainTbl.UnitType FROM MainTbl ORDER BY MainTbl.UnitType;
绑定列:1
- 允许值列表编辑:是
- 锁定:否
- 更新后:[事件过程]'''请参阅下面显示的子例程:ComboBoxUnitType_AfterUpdate()。
二(依赖)组合框用于拾取的单位子类型:
- 名称:CBUnitSubType
- 控件:UnitSubType '''在主表中的字段:MainTbl
- 行来源:ComboQueryUnitSubType'''由查询生成器构建,详细如下。
- 绑定列:1个
- 允许值列表编辑:是
- 锁定:否
查询生成器对象:ComboQueryUnitSubType
SELECT DISTINCT [MainTbl].UnitSubType
FROM [MainTbl]
WHERE ((([MainTbl].UnitType)=[Forms]![Unit Editor]![UnitType]))
ORDER BY [MainTbl].UnitSubType;
通过选择创建“
VBA子程序[事件过程]对于上述组合框“CBUnitType”中的After Update事件,VBA子例程自动置于模块n中的VBA环境中的Microsoft Office Access Class Objects文件夹中amed:“Form_Unit编辑器”。子例程的名称也被预选为:“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程序执行,并重新查询为单位亚型组合框查询,然后它任意取得Unit SubType组合框的.value参数并将其清除为空字符串。
我想感谢Blue Claw Database Design提供的慷慨教程。具体而言,重新查询组合框查询的VBA代码是一种生命保护程序,并在其教程中详细介绍Dependent Drop Down List Box为什么查询ComboQueryUnitSubType(作为组合框的行源指定)不会每次都由Access自动重新运行用户选择的组合框是任何人的猜测。
对于啰嗦的问题和答案,我很抱歉。我希望在不久的将来回到一些不错的简洁代码! Dave