根据表单上另一个字段值的结果自定义 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
事件)。这反过来可能会导致您 .Requery
到 GotFocus
事件的条件子集,而不是前面组合框的 AfterUpdate
以上。基本上,您将在完整集和条件记录源查询之间切换。
诚然,我是一个新手,所以请耐心等待:)
我正在尝试在 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
事件)。这反过来可能会导致您 .Requery
到 GotFocus
事件的条件子集,而不是前面组合框的 AfterUpdate
以上。基本上,您将在完整集和条件记录源查询之间切换。