カテゴリをユーザーに割り当てるためのMSアクセスフォーム
-
28-10-2019 - |
質問
私は少し問題に固執しています。私はMS Access 2003を使用しています(サーバーでも2010年)。
ユーザーのテーブル、カテゴリのテーブル、user_to_category用のテーブルがあります。
すべてのカテゴリ(ティックボックスを使用)を表示するフォームを作成するにはどうすればよいですか。各カテゴリをクリックすると、CategoryIDとUserID(セッションから)をユーザー_TO_Categoryテーブルに追加します。
個々のチェックボックスを作成し、OnClickイベントを使用しましたが、人々がさらに追加するため、カテゴリのリストを動的にロードする必要があり、手動で追加したくありません。
何か案は?カテゴリを備えたリストボックスを使用してから、ユーザーが複数のエントリを選択できるようにしました。これはテーブルに追加されます。
情報をありがとう!
解決
このクエリをレコードソースとして連続フォームを作成し、フォームに名前を付けます frmusers.
SELECT
u.userID,
u.user_name
FROM Users AS u
ORDER BY u.user_name;
2番目のフォームを作成し、 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にバインドされています。このクエリをCombo's Row Sourceプロパティとして使用します。
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を使用して、サブフォームコンボをリクルートするために、現在のユーザーに利用可能な(割り当てられていない)カテゴリのみを含むように更新されます。
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では、deleteの確認後、挿入後、および更新イベントからのrequery 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
このアプローチを使用すると、各ユーザーのカテゴリ割り当てを表示できます。サブフォームから行を追加または削除して、それらの割り当てを管理することもできます。
他のヒント
MS Accessを使用しているので、これを行う最も簡単な方法は 連続フォーム カテゴリテーブルをRecordSourceとして。
チェックボックスのオンクリックイベントをチェックインすることができます。どのカテゴリが現在のカテゴリ(=クリックされたものです)は、フォームにカテゴリIDを含むテキストボックスを配置し、テキストボックスの値をチェックするだけです(常にIDが含まれます。現在クリックされているレコードの)。