根据表单上另一个字段值的结果自定义 MS Access 表单字段查找

Customizing MS Access Form field Look-up based on results from another field value on form

诚然,我是一个新手,所以请耐心等待:)

我正在尝试在 Access 365 上开发一个表单,用户可以从表单上的一系列组合框中选择值,组合框基于我在数据库中创建的查找表。

我想做的是,如果我将一个字段值设置为 carpet, enter image description here

我想让“产品名称”字段只弹出地毯的产品名称,默认情况下“产品名称”字段的查找列表将显示所有地板类型的所有可能值。

我尝试编写事件 VB 脚本以将 Flooring Type 值捕获为全局变量,并且我能够显示一个消息框,表明在访问产品名称组合框时该变量可用,但是我想将产品名称查询的行源查询调整为仅 return 与我选择的地板类型相匹配的值

SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE Flooring.[Flooring Type] = ProdType
ORDER BY Flooring.[Product Name];

WHERE Flooring.[Flooring Type] = WHERE (((Flooring.[Flooring Type])=[Forms]![Selections Flooring Type]![Product Type])) doesnt' seem to work either

问题是我在 VB 脚本中分配的 ProdType 全局变量没有转移到 SQL 构建函数。所以我假设 VB 脚本和 SQL Designer 不会相互交谈。

还有其他方法吗?

假设 VBA,考虑让您的查询指向保存在 Access 项目的标准模块(即不在表单或报表后面)中的 user-defined 函数:

VBA

Public Global ProductType As String: ProductType = "some value"

Public Function GetProductType() As String
   GetProductType = ProductType
End Function

SQL

SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE Flooring.[Flooring Type] = GetProductType();

但是,您可以简单地 运行 条件组合框记录源。

SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE (((Flooring.[Flooring Type])=[Forms]![Selections Flooring Type]![Product Type]));

但一定要 运行 Requery 上一个组合框的 AfterUpdate 事件:

Private Sub Product_Type_Combo_AfterUpdate() 
   Me.Product_Name_Combo.Requery
End Sub

注意: 因为你使用的是连续表格,所以 .Requery 甚至会 运行 on all 显示,重复组合框,如果特定行不满足组合框上的条件,这将导致一些显示的数据消失。请放心,数据将保留在基础 table 中。这可能会导致不良的用户体验。

一个解决方法包括当用户失去对产品名称组合框 (LostFocus 事件)以及当用户跨行导航时(CurrentRow 事件)。这反过来可能会导致您 .RequeryGotFocus 事件的条件子集,而不是前面组合框的 AfterUpdate 以上。基本上,您将在完整集和条件记录源查询之间切换。