заполнить таблицу «многие ко многим» с доступом - PullRequest
3 голосов
/ 31 августа 2009

У меня есть две таблицы (persons и projects), которые находятся в таблице «многие ко многим», таким образом, связаны между собой третьей таблицей persons_projects

В MS Access я теперь создал форму, отображающую данные из таблицы projects.

Мне нужна подчиненная форма, показывающая все persons - наборы данных, которые участвуют в этом проекте. В этой подчиненной форме также должна быть возможность добавлять (или удалять) людей из этого проекта - раскрывающийся список кажется лучшим выбором здесь.

Как я могу это сделать? Я могу показать всех участников, но не могу добавить их. Похоже, у меня снова проблема «вставить в поле зрения», так как мне нужны persons и persons_projects, чтобы показать правильные наборы данных. но так как я изменяю / добавляю строки только в одну таблицу (persons_projects), я не понимаю, почему доступ снова является стервозным.

Ответы [ 2 ]

1 голос
/ 31 августа 2009

Вам не нужны люди, только лица_проекты. Я предполагаю, что people_projects состоит из:

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

и (рекомендуется) отметка даты и времени и поле пользователя.

В подчиненной форме задано дочернее и главное поле связи для project_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 из соединительной таблицы.

0 голосов
/ 01 сентября 2009

Похоже, что люди - это основной набор данных, поскольку вы хотите иметь возможность связать его с несколькими проектами, а также удалить запись о человеке.

Для формы используйте таблицу Персоны. Подформа должна быть основана на таблице person_projects и связана с соответствующими идентификаторами. Вы можете использовать поле со списком для проекта в подчиненной форме и показать другое поле, чтобы пользователь мог идентифицировать проект (имя?). Возможно, вы захотите показать все данные проекта для каждого проекта в этой форме, но вы можете найти это очень запутанным для пользователя. Лучше всего иметь отдельную форму, которую вы можете всплыть, чтобы предоставить больше информации о проекте.

Если вы хотите удалить человека, вы можете просто удалить его из таблицы лиц, но вам нужно решить, хотите ли вы какие-либо записи о потерях в таблице person_projects (чего не следует делать). В Access легко установить ссылку с ссылочной целостностью (каскадное обновление и удаление необязательно). Вам решать, насколько это должно быть надежно.

...