2012-02-21 14 views
1

少し問題が残っています。私はMSアクセス2003(私たちのサーバーでも2010年)を使用しています。msカテゴリをユーザに割り当てるためのアクセスフォーム

私はユーザーのテーブル、カテゴリのテーブル、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; 

カテゴリ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 

このアプローチでは、各ユーザーのカテゴリの割り当てを表示することができます。サブフォームから行を追加または削除して、これらの割り当てを管理することもできます。

+0

ありがとうございます。私はこのメソッドを使って、現在動作するフォームを作成しました! :) –

0

MS Accessを使用しているので、これを行う最も簡単な方法は、の連続フォームをカテゴリのレコードソースとして作成することです。

フォームにcategoryIDのテキストボックスを配置し、テキストボックスの値をチェックするだけで、現在のカテゴリ(現在クリックされているもの)のチェックボックスのonClickイベントをチェックインすることができます。現在クリックされているレコードのIDを常に含む)。

関連する問題