【问题标题】:Changing Row Source of a Lookup depending on another field根据另一个字段更改查找的行源
【发布时间】:2016-04-16 00:55:54
【问题描述】:

我正在尝试通过从单独的查找框中选择表名来定义查找字段的行源。

产品目录由大约 41 个产品组组成,然后进一步划分为类型,其中一些有超过 100 种类型。

我有一个产品组表(41 个组),然后我有一个单独的每个产品组的类型表(41 个表)。所有类型表名称都与它们在产品组表中显示的完全相同。我希望能够从查找框中选择产品组,然后在单独的查找框中从相应表中选择类型。

下面的图片应该有助于了解我想要做什么。

设置我的第一个查找框:

设置我的第二次查找:

这可能吗,如果可以,有人可以伸出援手吗?

谢谢。

【问题讨论】:

  • 你会使用 VBA 吗?数据库的结构是否规范化了?如果所有产品类型都在同一个表中,并且具有指向其相关产品组的外键,则执行此操作会更容易。否则,您将需要使用 VBA 来提取 tbl 名称并更新第二个组合框的记录源。
  • 没关系,产品组名是否与存储产品类型的表名完美匹配?您能否提供一些组的示例以及与之对应的表和表名?所有产品类型表的构造方式是否相同(相同的列和列名)?
  • 我只有基础知识。我曾想过使用一个函数来设置一个变量=在产品组框中选择的值,然后设置第二个组合框的源=那个变量。我不确定如何实现它。我已经开始编译一个电子表格,其中包含 A 列中的产品组和 B 列中的类型,如下所示: Col. A ------------- Col. B Group1 --------- --Type1 Group1 -----------Type2 Group1 ------------Type3 Group2 -----------Type1 Group2 -------- ----Type2等,然后我将其导入Access,然后在第一个组合框上使用一个简单的过滤器。
  • 您走在正确的道路上。如果您在单个表中有不同组/类型组合的列表,则可以编写查询以仅显示与 combo1 中所选值匹配的记录。这是 IMO 最简单的方法。
  • 谢谢克里斯托弗。我试图上传更多我的桌子的图片,但我的声誉不够高。

标签: sql database ms-access


【解决方案1】:

总结一下,您将需要一个包含您的 TypeID、GroupID 和任何其他“类型”相关字段的表。

您的 Group ComboBox 应该将 ID 字段作为其第一列(使过滤更容易),因此您的控制源应该是:

SELECT [ProductGroup]![GroupID], [ProductGroup]![ProductGroup] 
FROM [ProductGroup]
ORDER BY [ProductGroup];

然后在 Format 选项卡上 Group ComboBox 的属性中将列宽设为 0";x" 以隐藏 ID 字段。

Type ComboBox 的控制源应该是:

SELECT [NewTypeTable]![TypeID], [NewTypeTable]![TypeName]
FROM [NewTypeTable]
WHERE [NewTypeTable]![GroupID] Like [Forms]![frmWithComboBoxName]![CboPGroup]
ORDER BY [NewTypeTable]![TypeName];

同样,如果您想隐藏 ID 字段,请将第一列宽度设为 0"。

您还应该重新查询CboPGroupafterUpdate() 事件中的第二个组合框,这将根据CboPGroup 中的新选择过滤第二个组合框。代码(VBA)是:

Forms!frmWithComboBoxName!CboType.Requery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多