Ms access 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”的记录实例,则假设用户已在UnitType组合框中选择了“truck”,UnitSubType组合框中显示的选项之一应为“18 wheeler” 问题,B部分:我还希望用户能够通过在组合框中键入一个新的UnitSubType来添加它:如果用户已经在UnitType的组合框中选择了“truck”,并在UnitSubType的组合框中手动键入了“flatbed”,那么编辑的记录应该是“flatbed”当UnitType为“truck”时,UnitSubType和未来的编辑操作应将“flatbed”作为UnitSubType选项。在更简单的情况下,将“允许值列表编辑”设置为“是”可以解决此问题,但我想确保在为问题A部分提供的解决方案中可以使用此功能 在SO中已经有类似的问题线索,但我是一个在访问方面的noob,以至于我无法推断出符合我需要的答案。我很抱歉;请尽量具体 非常感谢你!Ms access MS Access 2007:筛选组合框的选择列表,ms-access,combobox,ms-access-2007,Ms Access,Combobox,Ms Access 2007,背景:我的表单的记录源是一个查询(“BigQuery”),它只是组合了几个相关的表。我正在设置组合框来编辑字段;这些组合框的控制源始终只是BigQuery中的一个字段。其中一个字段是UnitType,另一个字段是UnitSubType。UnitSubType大约有100个不同的条目,但当与特定的UnitType配对时,其中许多条目没有上下文意义:如果UnitType=“Car”,那么UnitSubType=“18 wheeler”就没有意义,我宁愿不给客户犯错的机会 问题,A部分:当用户在表单上
Dave我找到了一个我想分享的解决方案。访问很难描述,但我将列出规范的例外情况,并尝试以这种方式传达解决方案 用于拾取单位类型的第一个(主)组合框:
- 名称:CBUnitType
- ControlSource:UnitType'''主表中的字段:MainTbl
- 行源:
SELECT DISTINCT MainTbl.UnitType FROM MainTbl ORDER BY MainTbl.UnitType;
- 绑定列:1
- 允许值列表编辑:是
- 没有
- 更新后:[事件过程]''请参阅子例程:ComboBoxUnitType_AfterUpdate(),如下所示
- 名称:CBUnitSubType
- ControlSource:UnitSubType'''主表中的字段:MainTbl
- 行源:ComboQueryUnits子类型''',由查询生成器生成,详细信息如下
- 绑定列:1
- 允许值列表编辑:是
- 没有
SELECT DISTINCT [MainTbl].UnitSubType
FROM [MainTbl]
WHERE ((([MainTbl].UnitType)=[Forms]![Unit Editor]![UnitType]))
ORDER BY [MainTbl].UnitSubType;
通过在上述组合框“CBUnitType”中为更新后事件选择“[Event Procedure]”来创建VBA子例程。VBA子例程自动放置在VBA环境中名为“Form_Unit Editor”的模块中的Microsoft Office Access Class Objects文件夹中。子例程名称也预先选择为:ComboBoxUnitType_AfterUpdate()“几乎可以肯定,如果您更改其中任何一个名称,链接将严重中断。模块中的VBA代码为:
Option Compare Database
Option Explicit
Private Sub ComboBoxUnitType_AfterUpdate()
Forms![Unit Editor]![ComboBoxUnitSubType].Requery
Forms![Unit Editor]![ComboBoxUnitSubType].Value = ""
End Sub
因此,其效果是:用户更新Unit Type组合框后,vba例程执行并重新查询Unit SubType组合框的查询,然后它任意获取Unit SubType组合框的.value参数并将其清除为空字符串
我要感谢提供的大量教程。具体来说,重新查询组合框查询的VBA代码是一个救命稻草,在他们的教程中详细介绍了为什么每次选择组合框时,Access不会自动重新运行指定为组合框行源的查询组合QueryUnitSubtype用户的ted是任何人的猜测
我为冗长的问题和答案感到抱歉。我希望在不久的将来回到一些好的、简洁的代码!
戴夫