1

このような設計で、ジャンクションテーブルにレコードを追加したり、レコードを削除したりする機能を作成したいと思います。

ケースは、従業員を編集し、彼らが受けることができる試験を選択するときからです。左側のリストボックスには、(とにかく)資格のない試験があり、右側のリストボックスには資格のある試験があります。

テーブルは次のようなものです。

TABLE EmpExam 
(
  EmpID,
  ExamID
)

EmpID常にExamID認識されますが、左側のリストボックスから選択されます。右側のリストボックスのレコードを削除するには、おそらくEmpIDとの両方が必要です。ExamID

それぞれのボックスに入れたら、すぐに削除/挿入する必要はありません(フォームが閉じるまで待つことができます)。

Accessでこれを達成するための良い/標準的な方法はありますか?

4

2 に答える 2

1

コードを使用してテーブルにアイテムを追加してから、コードを使用してアイテムを削除する必要があるのに、なぜリストボックスを使用するのですか?

あなたがやりたいことについては、サブフォームが通常の解決策です。さらに、サブフォームのrecordsetcloneを使用できます。その設定にはおそらく日時フィールドが必要であることに注意してください。また、ExamIDが一意であり、カスケード削除が有効になっている場合、メインテーブルから削除するとサブテーブルから削除されます。

于 2010-07-29T21:27:14.260 に答える
0

最終的に、生のSQLを実行するVBAOnClickメソッドをトリガーする1つの追加ボタンと1つの削除ボタンを備えた2つのリストボックスを使用しました。

メソッドは次のようになります。

If IsNull(cboInEligible.Column(1))
  Exit Sub
End If

CurrentDB.Execute ("INSERT INTO tblEmpExam (ExamID, EmpID) " & _
                   "VALUES (" & ExamID & ", " & lstInEligible.Column(1) & ")")

lstInEligible.Requery
lstEligible.Requery

削除クエリも同様に実行されます。

2つのリストボックスは相互に排他的です。

SELECT EmpID, EmpName
FROM Employee
WHERE EmpID NOT IN (SELECT EmpID FROM tblEmpExam WHERE ExamID = [txtExamID]);

txtExamIDは、フォームの非表示の(ただし、設計者には明らかな)コントロールです。これは、コントロールまたは絶対的な名前付け以外ではフォームのExamIDを参照できないためです。

他のリストボックスは、それを排他的にするEmpID IN代わりに持っています。EmpID NOT IN

于 2010-07-30T16:17:20.663 に答える