Создайте непрерывную форму с этим запросом в качестве источника записи и назовите форму 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 в элемент управления подчиненной формы в нижнем колонтитуле. Используйте идентификатор пользователя в качестве основных/дочерних свойств ссылки в элементе управления подчиненной формы.
При таком расположении подчиненная форма будет отображать строку для каждой присвоенной категории, связанной с текущим пользователем в основной форме (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 из событий After Delete Confirm, After Insert и After Update, чтобы он обновлялся и содержал только неназначенные категории, доступные для текущего пользователя.
Форма_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
Этот подход позволит вам просматривать назначения категорий для каждого пользователя. Вы также можете добавлять или удалять строки из подчиненной формы для управления этими назначениями.
person
HansUp
schedule
22.02.2012