MS форма доступа для выделения категорий пользователю - PullRequest
1 голос
/ 21 февраля 2012

Я застрял с небольшой проблемой. Я использую MS Access 2003 (также 2010 на нашем сервере).

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

Как мне создать форму, которая показывает все категории (с полями для галочек), и, когда я нажимаю на каждую из них, она добавляет эти categoryID и userID (из сессии) в таблицу user_to_category.

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

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

спасибо за любую информацию!

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Создайте непрерывную форму с этим запросом в качестве источника записи и назовите форму 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

Этот подход позволит вам просматривать назначения категорий для каждого пользователя.Вы также можете добавлять или удалять строки из подчиненной формы для управления этими назначениями.

0 голосов
/ 21 февраля 2012

Поскольку вы используете MS Access, самый простой способ сделать это - создать непрерывную форму с таблицей категорий в качестве RecordSource.

Вы можете проверить событие onClickустановите флажок, какая категория является текущей (= только что нажатой), просто поместив текстовое поле с categoryID в форму и проверив значение текстового поля (оно всегда будет содержать идентификатор текущей выбранной записи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...