我遇到了一个小问题。我正在使用MS Access 2003(也是我们服务器上的2010)。
我有一个用户表,一个类别表和一个user_to_category表。
如何创建一个显示所有类别的表单(带有复选框),当我点击每个类别时,它会将categoryID和userID(来自会话)添加到user_to_category表中。
我创建了单独的复选框并使用了onClick事件,但我需要动态加载类别列表,因为人们会添加更多,我不想手动添加它们。
有什么想法吗?我考虑过使用带有类别的列表框,然后允许用户选择多个条目 - 然后将其添加到表中..但不确定这是最好的方法吗?
感谢任何信息!
答案 0 :(得分: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
此方法允许您查看每个用户的类别分配。您还可以在子窗体中添加或删除行来管理这些分配。
答案 1 :(得分:0)
当您使用MS Access时,最简单的方法是创建一个连续表单,将类别表作为RecordSource。
您可以通过在表单上放置一个带有categoryID的文本框并检查文本框的值来检查复选框的onClick事件,该类别是当前的类别(=刚刚单击的那个)(它将始终包含当前点击的记录的ID。)