DoCmd.ApplyFilter的替代方案或建议?

时间:2017-06-13 12:15:16

标签: vba ms-access

我有一个绑定到访问数据库中主表的表单。有5个组合框,显示存储在主数据库中的ID的描述。

TruckModelID存储在tblTruckList中,与tblTruckModel中的TruckModelID相关。 TruckModelName存储在tblTruckModel中。 我可以创建一个简单的搜索功能,我可以在其中输入ID,但用户不会知道特定型号的ID。如何进行某种搜索,可以查看txtFindTruck(我的搜索字段)中的值并将其与名称进行比较,然后选择正确的ID并从TruckList返回具有正确ID的记录?

这是我在查看tblMain中的值时所使用的:

DoCmd.ApplyFilter "", "[TruckID] Like ""*"" & Forms![Ändra Truck]!txtFindTruck & ""*"""

这基本上就是我想要的:

DoCmd.ApplyFilter "", "[cmbTruckModelName] Like ""*"" & Forms![Ändra Truck]!txtFindTruck & ""*""" 

然而,表单使用的实际值是TruckModelID而不是TruckModelName

我确信我在描述中遗漏了一些让人难以理解的内容,请不要犹豫,问我任何事情:D也会非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用SQL IN子句按其他查询进行过滤,如下所示:

DoCmd.ApplyFilter "", "[TruckID] IN(" & _
"SELECT TruckID From MyTable WHERE TruckModelName LIKE ""*"" & Forms![Ändra Truck]!txtFindTruck & ""*"")"

填写像你的表名一样的空白,它应该有效。

但是,这可能不是解决您问题的最佳方法。如果您使用的是组合框,则可以使用隐藏的ID列进行搜索,并在组合框中包含实际的模型名称,这可能更加用户友好。

有关如何隐藏列的信息,请参阅How to hide columns in a ComboBox dropdown?