用于为用户分配类别的 ms 访问表单
Posted
技术标签:
【中文标题】用于为用户分配类别的 ms 访问表单【英文标题】:ms access form for allocating categories to a user 【发布时间】:2012-02-21 16:45:58 【问题描述】:我遇到了一个小问题。我正在使用 MS access 2003(我们的服务器上也是 2010)。
我有一个用户表、一个类别表和一个 user_to_category 表。
我将如何创建一个显示所有类别(带有复选框)的表单,当我单击每个类别时,它会将 categoryID 和 userID(来自会话)添加到 user_to_category 表中。
我创建了单独的复选框并使用了 onClick 事件,但我需要动态加载类别列表,因为人们会添加更多并且我不想手动添加它们。
有什么想法吗?我考虑过使用带有类别的列表框,然后允许用户选择多个条目-然后将其添加到表中..但不确定这是最好的方法吗?
感谢您提供任何信息!
【问题讨论】:
【参考方案1】:用这个查询创建一个连续的表单作为它的记录源,并将表单命名为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 添加一个绑定文本框,以及一个绑定到 categoryID 的组合框 cboCategoryID。将此查询用作组合的行源属性。
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 中,再次从 After Delete Confirm、After Insert 和 After Update 事件中重新查询 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
这种方法将允许您查看每个用户的类别分配。您还可以在子表单中添加或删除行来管理这些分配。
【讨论】:
谢谢。我使用这种方法创建了现在可以使用的表单! :)【参考方案2】:当您使用 MS Access 时,最简单的方法是创建一个连续表单,并将类别表作为 RecordSource。
您可以通过在表单上放置一个带有 categoryID 的文本框并检查文本框的值(它总是包含当前点击记录的ID)。
【讨论】:
以上是关于用于为用户分配类别的 ms 访问表单的主要内容,如果未能解决你的问题,请参考以下文章