我有一个带有链接 SQL 表的 MS Access。有一张表用于记录不同的项目和从事这些项目的人员。桌子是这样的形式
项目ID | 人员ID | 人物头衔 |
---|---|---|
12 | 123 | 副总裁 |
12 | 124 | 高级 |
12 | 125 | 初级 |
13 | 123 | 副总裁 |
13 | 124 | 高级 |
13 | 126 | 初级 |
13 | 127 | 初级 |
14 | 456 | 副总裁 |
14 | 457 | 高级 |
14 | 458 | 高级 |
14 | 459 | 初级 |
14 | 460 | 初级 |
我正在尝试查看是否可以创建一个 MS Access 表单来输入上述信息,但该表单应按以下格式显示,
项目ID | VP1 | VP2 | 高级1 | 高级2 | 初级1 | 初级2 | 初级3 | 初级4 |
---|---|---|---|---|---|---|---|---|
12 | 123 | 124 | 125 | |||||
13 | 123 | 124 | 126 | 127 | ||||
14 | 456 | 457 | 458 | 459 | 460 |
因此,当添加新项目时,PersonTitle 列将为空白,用户应该能够在此处输入信息。这可能吗?
我尝试了交叉表功能,但这不允许数据输入。
为简单起见,您可以假设每个项目最多有 2 名副总裁、2 名高级人员和 4 名初级人员。但是,如果有一种方法可以动态更新表单以允许任意数量的角色,那就太好了(但不指望它)。任何标题栏都可以保留空白
我想看看是否有一种方法可以实现这一目标,而无需创建名为 VP1、VP2 等的新列,因为这将很难管理
如果没有大量的 VBA 和 SQL 代码,您可能无法实现该表单来填充该表,因为两者都具有不同的行粒度。拟议的宽格式表格仅包含项目级别,长格式表格包含项目和人员级别。相反,为什么不构建一个与原始表结构对齐的相同长格式的表单?
鉴于您规定了每个项目规则的最大可能人数,请考虑为每个新项目预先填充这些最大可能的头衔。对于 INSERT
表中的每个
projects
,可以使用 MS Access 数据宏运行以下查询。或者,您可以在 SQL Server 中使用触发器。
NOT EXISTS
子查询,查询可以避免将重复项追加到表中。project_persons_lookup
表中。FROM
子句中的逗号分隔表)来实现项目和可能的人员之间的成对匹配。INSERT INTO project_persons (Project ID, PersonTitle)
SELECT p.ProjectID, ppl.PersonTitle
FROM projects p, possible_persons_lookup ppl
WHERE NOT EXISTS (
SELECT 1
FROM project_persons sub
WHERE sub.ProjectID = p.ProjectID
AND sub.PersonTitle = ppl.PersonTitle
)
然后创建一个
project_persons
表单,仅允许用户通过主项目表单上的数据表/连续子表单更新(不添加或删除)长格式的人员:
项目ID | 人物头衔 | 人员ID |
---|---|---|
1001 | 副总裁 | ...人员表的组合框... |
副总裁 | ” | |
高级 | ” | |
高级 | ” | |
初级 | ” | |
初级 | ” | |
初级 | ” | |
初级 | ” | |
1002 | 副总裁 | ...人员表的组合框... |
副总裁 | ” | |
高级 | ” | |
高级 | ” | |
初级 | ” | |
初级 | ” | |
初级 | ” | |
初级 | ” | |