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

时间:2015-05-12 12:45:22

标签: database filter combobox ms-access-2007

我正在学习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.项目子部分

以及TaskList的所有字段。

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

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

1 个答案:

答案 0 :(得分:1)

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

我在表单上制作了4个组合框,如下所示:Tasks表中的所有字段:

  1. 项目负责人
  2. 姓名:Combo0

    行来源:

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

    宏观>事件 - >更新后:

        Requery -> Combo2
        Requery -> Combo4
        Requery -> Combo8
    
    1. 项目名称
    2. 姓名: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
      
      1. 项目部分
      2. 姓名: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
        
        1. 子部分名称
        2. 姓名: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表中的所有值。

          现在过滤的步骤如下:

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

            Requery -> `Combo2` 
            
          2. 过滤当前owner

            的项目列表
                Requery -> `Combo4` 
            

            过滤当前owner

            的零件清单
                Requery -> `Combo8` 
            

            过滤当前owner

            的子部分列表
            1. 从组合框Project中选择Combo2。选择项目后,此组合框运行另一个宏:

              Requery -> `Combo4` 
              
            2. 过滤当前ownerproject

              的零件清单
                  Requery -> `Combo8` 
              

              过滤当前ownerproject

              的子部分列表
              1. 从组合框Part中选择Combo4。选择零件后,此组合框将运行另一个宏:

                Requery -> `Combo8` 
                
              2. 过滤当前ownerprojectpart的子部分列表。

                1. 从组合框Sub Part中选择Combo8。选择Subpart后,此组合框将运行另一个宏:

                  ApplyFilter -> =" [Subpart ID] = " & [Combo8] & "" 
                  
                2. 表示当前ownerprojectpartsubpart

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