如何使用多个组合框过滤 MS Access 中的数据?

Posted

技术标签:

【中文标题】如何使用多个组合框过滤 MS Access 中的数据?【英文标题】:How to use multiple combo boxes to filter data in MS Access? 【发布时间】:2015-05-12 12:45:21 【问题描述】:

我正在学习 MS Access 2007。

我有几个表链接在一起如下:

OwnerList
ID | Project Owner | Address etc

ProjectList
ID | Project Name | Project Owner (Linked to OwnerList.ID) | etc

PartList
ID | Project Part | Project (linked to ProjectList.ID) | etc

SubpartLIst
ID | Project Subpart | Project Part (linked to PartList.ID) | etc

WorkerList
ID | Worker Name | Address etc

TaskList
ID | Subpart (linked to SubpartList.ID) | Assigned to (Linked to WorkerList.ID) | Work to bo done | etc

现在我想设计一个使用 4 个组合框的表单: 1、项目负责人(姓名); 2、项目名称; 3、项目部分; 4.项目子部分

以及任务列表的所有字段。

此表单将被四个组合框动态过滤,如果所有四个组合框都已更新,那么我们将填写任务列表的记录。

如何在更新前一个组合框时过滤每个下一个组合框以及如何填充任务列表表的记录?

【问题讨论】:

【参考方案1】:

我已经做到了。这是解决方案。

我在我的表单上创建了 4 个组合框,如下所示以及 Tasks 表中的所有字段:

    项目所有者

姓名:Combo0

行来源:

    SELECT [Owner List].[Owner ID], [Owner List].[Owner Name]
    FROM [Owner List];

宏->事件->更新后:

    Requery -> Combo2
    Requery -> Combo4
    Requery -> Combo8
    项目名称

姓名:Combo2

行来源:

    SELECT [Project List].[Project ID], [Project List].[Project Name]
    FROM [Project List]
    WHERE ((([Project List].[Owner ID])=[Forms]![Form1]![combo0]));

宏->事件->更新后:

    Requery -> Combo4
    Requery -> Combo8
    项目部分

姓名:Combo4

行来源:

    SELECT [Parts List].[Part ID], [Parts List].[Section Name]
    FROM [Project List] RIGHT JOIN [Parts List] ON [Project List].[Project    ID] = [Parts List].[Project ID]
    WHERE ((([Parts List].[Project ID])=[forms]![Form1]![Combo2]) AND (([Project List].[Owner ID])=[Forms]![Form1]![Combo0]));

宏->事件->更新后:

    Requery -> Combo8
    子部分名称

姓名:Combo8

行来源:

    SELECT [Subparts List].[Subpart ID], [Subparts List].[Subpart Name]
    FROM [Project List] RIGHT JOIN ([Project Parts] RIGHT JOIN [Subparts List] ON [Project Parts].[Part ID] = [Subparts List].[Part ID]) ON [Project List].[Project ID] = [Project Parts].[Project ID]
    WHERE ((([Subparts List].[Part ID])=[Forms]![Form1]![Combo4]) AND (([Project Parts].[Project ID])=[Forms]![Form1]![Combo2]) AND (([Project List].[Owner ID])=[Forms]![Form1]![Combo0]));

宏->事件->更新后:

    ApplyFilter -> =" [Subpart ID] = " & [Combo8] & ""

以及Tasks 表中的所有值。

现在过滤的步骤如下:

    从组合框Combo0 中选择Owner。选择所有者后,此组合框将宏运行为:

    Requery -> `Combo2` 
    

过滤当前owner的项目列表

    Requery -> `Combo4` 

过滤当前owner的零件列表

    Requery -> `Combo8` 

过滤当前owner的子部分列表

    从组合框Combo2 中选择Project。选择项目后,此组合框运行另一个宏:

    Requery -> `Combo4` 
    

过滤当前ownerproject的零件列表

    Requery -> `Combo8` 

过滤当前ownerproject的子部分列表

    从组合框Combo4 中选择Part。选择零件后,此组合框运行另一个宏:

    Requery -> `Combo8` 
    

过滤当前ownerprojectpart的子部分列表。

    从组合框Combo8 中选择Sub Part。选择子部分后,此组合框运行另一个宏:

    ApplyFilter -> =" [Subpart ID] = " & [Combo8] & "" 
    

对于当前的ownerprojectpartsubpart

从已经给出的关于通过组合框过滤的答案中我无法理解的是,给定的答案是通过相应组合框的字符串值(代码为ApplyFilter -> = " [Subpart ID] = '" & [Combo8] & "'")进行过滤。但是我在所有四个组合框中使用数字而不是字符串值作为列绑定,这会给出错误data mismatch。当我从代码中同时删除 ' ' 时,它成功过滤了记录。

【讨论】:

以上是关于如何使用多个组合框过滤 MS Access 中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用宏过滤带有组合框的表单 - MS Access

如何过滤表单中具有多个组合框的 Access 子表单?

在 MS Access 中根据表单中的多个组合框查询所有记录

MS ACCESS 过滤器组合框所有选项

Ms Access中的关键词搜索组合框

如何在 Access 中将一个控件源与来自用户表单的多个组合框一起使用?