使用访问权限填充多对多表

时间:2009-08-31 08:43:44

标签: ms-access many-to-many drop-down-menu subform

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

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

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

我该怎么做?我能够显示所有参与者,但我无法添加它们。似乎我再次“插入视图”问题,因为我需要personspersons_projects来显示正确的数据集。但由于我只是在一个表中更改/添加行(persons_projects),我不明白为什么访问会再次变得麻烦。

2 个答案:

答案 0 :(得分:1)

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

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

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

子窗体设置为project_id的Link Child和Master Field,它将由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。

答案 1 :(得分:0)

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

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

如果要删除某个人,只需从人员表中删除,但您需要确定是否需要在person_projects表中显示任何孤立记录(您不应该这样做)。在Access中很容易建立一个具有参考完整性的链接(级联更新和删除可选)。这取决于你需要多么强大。