2016-01-21 124 views
0

背景:我的表单的记录源是一个查询(“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,我一直无法推断出答案以适合我的需要。对不起;请尽可能具体。

非常感谢! 戴夫

回答

0

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

第一(主)组合框用于拾取单位类型:

  • 名称: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