レコードソースとしてこのクエリを使用して連続フォームを作成し、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;
カテゴリIDにバインドされたカテゴリ名のためにバインドされたテキストボックス、コンボボックス、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:fsubUserCategoriesで
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
、再クエリ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
このアプローチでは、各ユーザーのカテゴリの割り当てを表示することができます。サブフォームから行を追加または削除して、これらの割り当てを管理することもできます。
ありがとうございます。私はこのメソッドを使って、現在動作するフォームを作成しました! :) –