Создайте непрерывную форму с этим запросом в качестве источника записи и назовите форму frmUsers .
SELECT
u.userID,
u.user_name
FROM Users AS u
ORDER BY u.user_name;
Создайте вторую форму, fsubUserCategories , сэтот источник записи.
SELECT
u2c.userID,
u2c.categoryID,
cat.category_name
FROM
user_to_category AS u2c
INNER JOIN Categories AS cat
ON u2c.categoryID = cat.categoryID
ORDER BY cat.category_name;
Добавьте связанное текстовое поле для category_name и поле со списком, cboCategoryID , привязанное к categoryID.Используйте этот запрос как свойство источника строки комбо.
SELECT
cat.categoryID,
cat.category_name
FROM
Categories AS cat
LEFT JOIN (
SELECT categoryID
FROM user_to_category
WHERE userID=Forms!frmUsers!txtUserID
) AS sub
ON cat.categoryID = sub.categoryID
WHERE (((sub.categoryID) Is Null))
ORDER BY cat.category_name;
Разверните раздел нижнего колонтитула frmUsers и добавьте fsubUserCategories в элемент управления подчиненной формы в нижнем колонтитуле.Используйте userID в качестве основных / дочерних свойств ссылки в элементе управления подчиненной формы.
При таком расположении подчиненная форма будет отображать строку для каждого назначения категории, связанного с текущим пользователем, в главной форме (frmUser).
Используйте frmUsers On Current, чтобы запросить комбо подчиненной формы, чтобы оно обновлялось и содержало только доступные (неназначенные) категории для текущего пользователя.
Form_frmUsers :
Private Sub Form_Current()
' Note: fsubUserCategories is the name of the subform control '
' my subform control uses the same name as the form it contains '
' but beware --- the names don't have to match --- double-check! '
Me.fsubUserCategories.Form.cboCategoryID.Requery
End Sub
В fsubUserCategories запрос cboCategoryID из событий Подтверждение удаления, После вставки и После обновления --- еще раз, чтобы он обновлялсясодержать только неназначенные категории, доступные для текущего пользователя.
Form_fsubUserCategories :
Private Sub Form_AfterDelConfirm(Status As Integer)
Me.cboCategoryID.Requery
End Sub
Private Sub Form_AfterInsert()
Me.cboCategoryID.Requery
End Sub
Private Sub Form_AfterUpdate()
Me.cboCategoryID.Requery
End Sub
Этот подход позволит вам просматривать назначения категорий для каждого пользователя.Вы также можете добавлять или удалять строки из подчиненной формы для управления этими назначениями.