填充具有访问权限的多对多表

Posted

技术标签:

【中文标题】填充具有访问权限的多对多表【英文标题】:populate a many-to-many table with access 【发布时间】:2009-08-31 08:43:44 【问题描述】:

我有两个表(personsprojects),它们位于多对多表中,因此通过第三个表 persons_projects 链接在一起

在 ms 访问中,我现在创建了一个显示来自 projects 表的数据的表单。

我想要的是有一个子表单显示所有参与该项目的persons- 数据集。在这个子表单中,还应该可以从这个项目中添加(或删除)人员——下拉菜单似乎是这里的最佳选择。

我该怎么做?我可以显示所有参与者,但我无法添加他们。似乎我又遇到了“插入视图”问题,因为我需要 personspersons_projects 来显示正确的数据集。但由于我只是在单个表中更改/添加行 (persons_projects),所以我不明白为什么访问又很糟糕。

【问题讨论】:

就目前而言,这个问题属于超级用户,因为它似乎是表单设计,而不是编程。 它是“如何让这头野兽做我想做的事”。我认为这是 visual 编程 呃,在Access中的表单设计就是编程,不是吗?也就是说,您必须在其他应用程序中编写代码是在 Access 中指向/单击/拖放。按照你的标准,Remou,绝大多数 Access 操作都不是编程。 【参考方案1】:

您不应该需要人员,只需要 person_projects。我假设 person_projects 包括:

person_id  -> FK  ) Combined as PK, perhaps, if not, an autonumber PK
project_id -> FK  )

和(推荐)日期时间戳和用户字段。

子表单设置了一个链接子和项目ID的主字段,将由Access自动完成,以及一个类似的组合框:

Control Source: person_id
Row Source: SELECT person_id, surname & " " & forename, some_field FROM persons
Bound Column: 1
Column Count: 3 
Column Widths: 0cm;2cm;2cm 

编辑评论

虽然通常有点困难,但可以同时包含两个表并具有可更新的记录集,查询(视图)应包含联结表中的 project_id 和 person_id。

【讨论】:

我想在子表单中添加persons 以显示其他数据(如地址、电话号码等),那么我需要一个子表单吗? 如何从行源查询访问project_id?即只显示仍然可以添加的人——毕竟我想要唯一性。 access 只是不会在没有错误消息的情况下添加这些值(不知道非技术人员会发生什么) 添加子子表单会将默认视图更改为单个表单,但我需要连续表单才能正常工作。 aaargh,访问快把我逼疯了…… 您可以选择连续表单作为子表单的属性(格式选项卡,默认视图属性)。请为组合和子表单的行源发布一些 SQL。您需要创建一个查询,排除那些已经分配给项目的人,这可以通过将联结表链接到自身来完成。 我在回答中添加了一些内容。【参考方案2】:

听起来,persons 是这里的驱动数据集,因为您希望能够将其链接到多个项目以及删除人员记录。

将表单基于 Persons 表。子表单应基于 person_projects 表并由相应的 id 链接。您可以在子表单中的 projectid 上使用组合框并显示其他一些字段,以便用户可以识别项目(名称?)。您可能希望在此表单上显示每个项目的所有项目数据,但您可能会发现它让用户非常困惑。拥有一个可以“弹出”以提供更多项目信息的单独表单可能是更好的选择。

如果你想删除一个人,你可以从 person 表中删除,但你需要决定是否需要 person_projects 表中的任何孤立记录(你不应该这样做)。在 Access 中很容易建立具有引用完整性的链接(级联更新和删除可选)。这需要有多强大,由您决定。

【讨论】:

我从不想删除人员,我只想删除行人员-项目连接表。基于人的形式也是一种方式,但语义不同

以上是关于填充具有访问权限的多对多表的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis的多表(多对多)查询

如何过滤和访问 Django QuerySet 中的多对多字段?

goRBAC —— Go 语言基于角色的权限控制框架

在 Laravel 中查询用户的多对多关系

无法获取多对多表属性的数据

多对多 Spring Boot JPA 未填充多对多表