Выбор записей в форме MS Access на основе содержимого поля со списком - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть база данных доступа с двумя таблицами, одна для пользователей, а другая для прав пользователей.

Таблица пользователей содержит список имен пользователей с уникальным идентификатором:

ID | Name
1  | Joe Bloggs
2  | Steve Smith
3  | A Another

и в таблице разрешений есть список идентификаторов пользователей и зон, к которым им разрешен доступ:

ID | Zone1 | Zone 2
1  | X     |
2  |       | X
3  | X     | X

Я создал форму для обновления разрешений пользователя на основе таблицы разрешений, которая прекрасно работает, шагая вперед иназад вручную, и в этой форме у меня есть поле со списком, в котором перечислены все пользователи из первой таблицы.

Мой вопрос: как мне сделать так, чтобы перейти к записи в таблице разрешений?Я знаю, что мне нужно поместить некоторый код в поле «после обновления» для поля со списком, и мне удалось заставить его работать, когда поле со списком отображало поле User.ID, но не User.Name.Я также установил связь между двумя полями идентификатора пользователя, но это тоже не сработало.

В заключение, я хочу выбрать «Другой» в раскрывающемся списке имени пользователя, в идентификаторе которого указан 3таблицу пользователей, а затем перейдите к записи ID 3 из таблицы разрешений.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

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

Лучшим подходом было быесть 3 таблицы:

  • Users(ID, Name) <- это будет то же самое, что у вас сейчас. </li>
  • Zones(zone_id, additional_zone_attributes)
  • user_zone_permissions(user_id, zone_id, additional_permission_attributes)

С этой структурой вы все еще могли бы использовать ответ @ LeeMac об использовании подформы: родительская форма будет перечислять пользовательские данные, а подформа будет перечислять разрешения зоны: enter image description here

С этой структурой было бы также тривиально добавить дополнительные атрибуты привилегии (возможно, в дальнейшем вы хотите добавить даты вступления в силу привилегии).

Просто убедитесь, что вы правильно установили свои первичные и внешние ключи (используя отношения): enter image description here

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

0 голосов
/ 06 декабря 2018

Вставьте подчиненную форму в форму с помощью Мастер-поля , установленного в качестве идентификатора в вашей таблице Users, и Дочернего поля , установленного в качестве идентификатора в вашей таблице Permissions..

Таким образом, обработчики событий не требуются, и отображаемые записи будут автоматически изменены.

...