【发布时间】:2021-05-24 22:33:52
【问题描述】:
希望我能以某种方式解释这一点,以便有人能够理解我想要实现的目标并能够提供可能的解决方案。
我正在创建一个数据库,用于管理工作场所的健康和安全。我创建了一张表来存储员工 - “表:员工”。该表具有常用字段(名字、姓氏等),但具体包含以下字段:“部门”(员工可以在其间移动时选择多项)、“其他能力”(例如叉车、订单拣选员等)。(再次选择多个选择))和“性别”。
我有第二个表格(“表格:工具箱对话”),系统存储工具箱对话(由用户通过表单创建。“表格:工具箱对话”)。工具箱演讲的预期接收者通常仅限于一个或多个部门,或者可能只是所有叉车司机或所有一种性别。当用户创建新的工具箱谈话(记录)时,他们会在表格(Form: Toolbox Talk)中从下拉列表中选择相应的变量(部门、能力、性别)。 (请注意,工具箱谈话有时可能与不止一个相关。)
我想要实现的是如何为每个工具箱谈话创建一个查询,它将只返回需要参与工具箱谈话的员工。
例如: 假设所有在“仓储”工作的“女性”员工都需要进行工具箱谈话。 然后,我希望我的数据库在表单上的数据表子表单中 - “表单:工具箱对话”返回所有女性员工并被标记为能够在仓储部门工作。
我只想补充一点,我想避免预期的系统用户使用功能区上的过滤器按钮,如果可能的话,我的偏好是使用查询或 vba。
到目前为止我所做的尝试:
1. 我创建了一个查询(“查询:EmployeesperToolboxTalk”)并添加了两个表(“查询:EmployeesExtended”和“查询:ToolboxTalksExtended”)。我尝试在相关字段之间创建连接(例如,Gender to Gender、Department to Department 等),但这对于连接属性 1、2 或 3 都不起作用。 如果我将加入限制为仅说部门,那么这似乎可以满足我的要求,但它不包括其他两个变量,这并不是我真正想要的工作方式。
SELECT [Query: EmployeesExtended].[Employee Name], [Query: EmployeesExtended].Department, [Query: ToolboxTalksExtended].[Toolbox Talk], [Query: ToolboxTalksExtended].ToolTalkID, [Query: ToolboxTalksExtended].RecipientVariables
FROM [Query: EmployeesExtended] INNER JOIN [Query: ToolboxTalksExtended] ON ([Query: EmployeesExtended].Gender = [Query: ToolboxTalksExtended].RelatedGender) AND ([Query: EmployeesExtended].AdditionalCompetency.Value = [Query: ToolboxTalksExtended].RelatedCompetency.Value) AND ([Query: EmployeesExtended].Department.Value = [Query: ToolboxTalksExtended].RelatedDepartment.Value);
2. 之后,我创建了一个联合查询,将所有不同的变量合并为一个:
SELECT [Table: Competencies].Competency
FROM [Table: Competencies];
UNION
SELECT [Table: Departments].Department
FROM [Table: Departments];
UNION SELECT [Table: Gender].Gender
FROM [Table: Gender];
然后我在表中添加了一个字段“RecipientVariables”:“Table: Toolbox Talks”,并将行源设置为:
SELECT [Query: RecipientVariables].Competency
FROM [Query: RecipientVariables];
然后我创建了一个从“RecipientVariables”到 Departments、AdditionalCompetency 和 Gender 的联接:
SELECT [Query: EmployeesExtended].[Employee Name], [Query: EmployeesExtended].Department, [Query: ToolboxTalksExtended].[Toolbox Talk], [Query: ToolboxTalksExtended].ToolTalkID, [Query: ToolboxTalksExtended].RecipientVariables
FROM [Query: ToolboxTalksExtended] INNER JOIN [Query: EmployeesExtended] ON ([Query: ToolboxTalksExtended].RecipientVariables.Value = [Query: EmployeesExtended].Department.Value) AND ([Query: ToolboxTalksExtended].RecipientVariables.Value = [Query: EmployeesExtended].AdditionalCompetency.Value) AND ([Query: ToolboxTalksExtended].RecipientVariables.Value = [Query: EmployeesExtended].Gender);
这使用连接属性 1、2 或 3 不返回任何结果。
3.我尝试的最后一件事是从我的员工表(“表:员工”)创建第二个联合查询:
SELECT [Table: Employees].AdditionalCompetency.Value
FROM [Table: Employees];
UNION
SELECT [Table: Employees].Gender
FROM [Table: Employees];
UNION SELECT [Table: Employees].Department.Value
FROM [Table: Employees];
然后,我在员工表中添加了一个新字段:“AreasofCompetency”,并将行来源设置为: "查询:EmployeeVariables"
这也行不通。
我现在不知道下一步该尝试什么。 也许我想做的事情是不可能的,或者比我意识到的要容易得多。
如果有人可以提供一些指导或提供替代建议,我将不胜感激。如果需要任何其他信息,请告诉我,我很乐意提供。
非常感谢。
【问题讨论】:
-
审查数据库设计,特别是表规范化。表格不必是用户友好的,这正是表单和报告的用途。
标签: ms-access