MS Access(带有链接的 SQL 表)表单,其中行转换为列以进行数据输入

问题描述 投票:0回答:1

我有一个带有链接 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 等的新列,因为这将很难管理

sql vba ms-access database-design ms-access-2013
1个回答
0
投票

如果没有大量的 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 副总裁 ...人员表的组合框...
副总裁
高级
高级
初级
初级
初级
初级
© www.soinside.com 2019 - 2024. All rights reserved.