4

多対多のテーブルにある 2 つのテーブル (personsと) があるため、3 番目のテーブルでリンクされています。projectspersons_projects

ms access で、projectsテーブルのデータを表示するフォームを作成しました。

私が欲しいのはpersons、このプロジェクトに参加するすべてのデータセットを表示するサブフォームを持つことです。このサブフォームでは、このプロジェクトから人物を追加 (または削除) することもできるはずです。ここでは、ドロップダウンが最適な選択肢のようです。

これどうやってするの?すべての参加者を表示できますが、追加できません。正しいデータセットを表示するpersons必要があるため、「ビューに挿入」の問題が再び発生したようです。persons_projectsしかし、単一のテーブル ( persons_projects) で行を変更/追加するだけなので、アクセスが再びビッチになる理由がわかりません。

4

2 に答える 2

1

persons_projects のみが必要です。person_projects は次のもので構成されていると仮定します。

person_id  -> FK  ) Combined as PK, perhaps, if not, an autonumber PK
project_id -> FK  )

(推奨) 日時スタンプとユーザー フィールド。

サブフォームは、Access によって自動的に入力される project_id のリンクの子フィールドとマスター フィールド、および次のようなコンボ ボックスでセットアップされます。

Control Source: person_id
Row Source: SELECT person_id, surname & " " & forename, some_field FROM persons
Bound Column: 1
Column Count: 3 
Column Widths: 0cm;2cm;2cm 

コメントを編集

多くの場合は少し難しいですが、両方のテーブルを含めて更新可能なレコードセットを持つことは可能です。クエリ (ビュー) には、ジャンクション テーブルの project_id と person_id の両方を含める必要があります。

于 2009-08-31T09:58:34.157 に答える
0

複数のプロジェクトにリンクしたり、人物レコードを削除したりできるようにするため、ここでは人物が駆動データセットであるように聞こえます。

Persons テーブルに基づいてフォームを作成します。サブフォームは person_projects テーブルに基づいており、対応する ID によってリンクされている必要があります。サブフォームの projectid でコンボ ボックスを使用し、他のフィールドを表示して、ユーザーがプロジェクト (名前?) を識別できるようにすることができます。このフォームに各プロジェクトのすべてのプロジェクト データを表示したい場合がありますが、ユーザーが非常に混乱する可能性があります。より多くのプロジェクト情報を提供するために「ポップアップ」できる別のフォームを用意することをお勧めします。

人物を削除したい場合は、persons テーブルから削除するだけで済みますが、person_projects テーブルに孤立したレコードが必要かどうかを判断する必要があります (そうすべきではありません)。Access では、参照整合性を備えたリンクを簡単に確立できます (カスケード更新と削除はオプションです)。これがどの程度堅牢である必要があるかは、あなた次第です。

于 2009-08-31T20:33:35.103 に答える