Я хочу ограничить то, что я могу ввести в формы для относительно сложных отношений «многие ко многим» (более сложных, чем в большинстве примеров) - PullRequest
0 голосов
/ 05 сентября 2018

Прежде всего: я использую Access 2016

У меня есть следующие основные настройки:

  • Клиенты (с именем, деловой информацией и т. Д.)
  • Контакты (контактная информация, каждый контакт принадлежит ОДНОМУ клиенту)
  • CustomerSite (адрес и т. Д., Каждый сайт принадлежит ОДНОМУ клиенту)
  • Услуги (информация об объекте, каждый объект принадлежит ОДНОМУ CustomerSite)

Эти отношения реализуются с использованием внешнего ключа для идентификатора клиента / сайта. Это работает довольно хорошо.

Однако, кроме того, я хочу следующее:

МНОГИЕ из Контактов могут нести ответственность за МНОГИЕ Сайты и / или МНОГИЕ Услуги.

Поэтому я сделал следующие соединительные таблицы:

  • ContactsCustomerSite (внешние ключи для Contact-ID и Site-ID)
  • ContactsFacility (внешние ключи для Contact-ID и Facility-ID)

enter image description here

Это работает до тех пор, пока я тщательно ввожу данные вручную в соединительные таблицы.

Однако я хочу предложить формы для назначения контактов сайтам / объектам, и именно здесь у меня возникла проблема.

Пока что я попробовал автоматически сгенерированные формы с небольшой настройкой. Они показывают, например, информация об объекте, а затем связанные контакты в форме данных-подчиненной форме (со ссылками на контактную форму).

Таблицы не ограничены должным образом. Я могу ввести новые контакты там, но с несколькими проблемами:

  • контакты, которые я ввожу туда, становятся НОВЫМИ контактами
  • Я должен вручную выбрать клиента, которому принадлежит контакт, это источник ошибок (например, контакты разных клиентов могут быть указаны как ответственные)

Я хотел бы выбрать только из существующих контактов, принадлежащих одному и тому же клиенту.

Как я могу это сделать?

Я не совсем понимаю, какая форма была бы правильной, чтобы ввести это, я также не очень понимаю, что делает доступ "под поверхностью": (

1 Ответ

0 голосов
/ 05 сентября 2018

Я бы использовал несвязанное поле со списком, чтобы добавить новые контакты сайта и объекта. Ограничьте поле со списком, чтобы показывать только контакты с совпадающим идентификатором клиента.

Для формы вашего сайта используйте текущие настройки, но установите для под-таблицы значение AllowAdditions = False. Поместите в форму поле со списком несвязанных контактов. Поместите кнопку [Добавить контакт] рядом со списком. При нажатии [Добавить контакт] используйте VBA для создания записи в таблице ContactsCustomerSite. Требовать вложенную таблицу для отображения новой записи.

Сделайте то же самое в форме объекта.

...