如何使用多个组合框来过滤 MS Access 中的数据?
How to use multiple combo boxes to filter data in MS Access?
我正在学习 MS Access 2007。
我有几个 table 链接在一起如下:
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个组合框的Form:
1.项目业主(姓名); 2.项目名称; 3、项目部分; 4. 项目子部分
以及任务列表的所有字段。
此表单将由四个组合框动态过滤,如果所有四个组合框都已更新,那么我们将为任务列表填写记录。
如何在更新上一个组合框时过滤每个下一个组合框以及如何为任务列表填充记录table?
我做到了。这是解决方案。
我在我的表单上制作了 4 个组合框,如下所示,所有字段来自 Tasks
table:
- 项目负责人
姓名: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
table.
中的所有值
现过滤步骤如下:
Select Owner
来自组合框 Combo0
。选择所有者后,此组合框 运行 宏为:
Requery -> `Combo2`
过滤当前 owner
的项目列表
Requery -> `Combo4`
过滤当前 owner
的部件列表
Requery -> `Combo8`
过滤当前 owner
的子部分列表
Select Project
来自组合框 Combo2
。选择项目后,此组合框 运行 另一个宏:
Requery -> `Combo4`
过滤当前 owner
和 project
的部件列表
Requery -> `Combo8`
过滤当前 owner
和 project
的子部分列表
Select Part
来自组合框 Combo4
。选择零件后,此组合框 运行 另一个宏:
Requery -> `Combo8`
过滤当前 owner
、project
和 part
的子部分列表。
Select Sub Part
来自组合框 Combo8
。选择子部分后,此组合框 运行 另一个宏:
ApplyFilter -> =" [Subpart ID] = " & [Combo8] & ""
当前 owner
、project
、part
和 subpart
。
从已经给出的关于通过组合框过滤的答案中,我无法理解的是,给定的答案是通过相应组合框的字符串值(代码为 ApplyFilter -> = " [Subpart ID] = '" & [Combo8] & "'"
)过滤。但是我在所有四个组合框中使用数字而不是字符串值作为列绑定,这给出了错误 data mismatch
。当我从代码中删除两个 ' '
时,它成功过滤了记录。
我正在学习 MS Access 2007。
我有几个 table 链接在一起如下:
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个组合框的Form: 1.项目业主(姓名); 2.项目名称; 3、项目部分; 4. 项目子部分
以及任务列表的所有字段。
此表单将由四个组合框动态过滤,如果所有四个组合框都已更新,那么我们将为任务列表填写记录。
如何在更新上一个组合框时过滤每个下一个组合框以及如何为任务列表填充记录table?
我做到了。这是解决方案。
我在我的表单上制作了 4 个组合框,如下所示,所有字段来自 Tasks
table:
- 项目负责人
姓名: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
table.
现过滤步骤如下:
Select
Owner
来自组合框Combo0
。选择所有者后,此组合框 运行 宏为:Requery -> `Combo2`
过滤当前 owner
Requery -> `Combo4`
过滤当前 owner
Requery -> `Combo8`
过滤当前 owner
Select
Project
来自组合框Combo2
。选择项目后,此组合框 运行 另一个宏:Requery -> `Combo4`
过滤当前 owner
和 project
Requery -> `Combo8`
过滤当前 owner
和 project
Select
Part
来自组合框Combo4
。选择零件后,此组合框 运行 另一个宏:Requery -> `Combo8`
过滤当前 owner
、project
和 part
的子部分列表。
Select
Sub Part
来自组合框Combo8
。选择子部分后,此组合框 运行 另一个宏:ApplyFilter -> =" [Subpart ID] = " & [Combo8] & ""
当前 owner
、project
、part
和 subpart
。
从已经给出的关于通过组合框过滤的答案中,我无法理解的是,给定的答案是通过相应组合框的字符串值(代码为 ApplyFilter -> = " [Subpart ID] = '" & [Combo8] & "'"
)过滤。但是我在所有四个组合框中使用数字而不是字符串值作为列绑定,这给出了错误 data mismatch
。当我从代码中删除两个 ' '
时,它成功过滤了记录。