質問: accessでのエラー access修行中の身で、勉強をかねて書類boxのデータベースを作成中です。 親テーブルのフィールド id(主キー、オートナンバー)、タイトル名、・・・・・、保存箱id 子テーブルのフィールド 保存箱id(主キー、オートナンバー)、保存箱名、・・・・ リレーション 親:保存箱id-子:保存箱id という構成です。 クエリで以下のような複合テーブルを作成し、 複合テーブルのフィールド id(主キー、オートナンバー)、タイトル名、・・・、保存箱名、・・・・ データを入力しようとすると、「レコードを追加できません。テーブルの結合キーがレコードセットにありません。」というエラーがでます。また、保存箱idに入力のないレコードは、抽出されません。 どのようにしたいかというと、保存箱idは入力しなくてもいいフィールド(関連させなくてもよいデータ)にしたく、複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるようにしたいです。 できれば、sqlを使用せずに解決したいと甘えておりますが、無理でしょうか。
回答: > 保存箱idに入力のないレコードは、抽出されません。 これに関しては、そのクエリをデザインビューで開いた後、親・子テーブルの「保存箱id」を結合している線を右クリックし、「結合プロパティ(j)」を選択して、「親テーブルの全レコードと...」という方にチェックを入れてokをクリックすれば、解決します。 (親テーブルの全レコードを表示した上で、子テーブルに該当データがあれば、それも表示する、というクエリになります) ・・・が。 > 複合テーブルで保存箱名を入れると、子テーブルに新たにレコードが追加されるように の問題には、上記のクエリでは対処できません。 (子テーブルの「保存箱id」が一対多の「一」側なので) これに対処するには、 a)親テーブルをレコードソースとするフォームを作成し、 b)「保存箱id」を、子テーブルをリストとするコンボボックスで表示させ、 c)子テーブルにない「保存箱」を入力した場合には、それを子テーブルに追加するための フォームを別途で開く とするのが、通常とられる手段かと思います。 ◎親テーブルで、「保存箱id」(数値型)フィールドをコンボボックスで表示させる方法: 1)テーブルをデザインビューで開く 2)「保存箱id」にカーソルを移動 3)画面右下の領域で、「ルックアップ」タブをクリック 4)「表示コントロール」で、「コンボボックス」を選択 5)「値集合ソース」に子テーブル名を、「列数」に「2」を、列幅に「0cm;3cm」を入力 (子テーブルのフィールドの並び順が「保存箱id、保存箱」の順だった場合) *この設定をしておくと、親テーブルを元にフォームを作成して、フィールドリストからの ドラッグアンドドロップでコントロールを追加した場合、自動的にコンボボックスになる ようになります。 なお、「c)」については、フォームのコンボボックスに「リスト外入力時」イベントを設定してやる必要があります。 これについての説明は、以下を参照して下さい: http://oshiete1.goo.ne.jp/kotaeru.php3?q=1749600 ※「リスト外イベント」は、「子テーブルにないデータだった場合に即座に追加」するための 一手段ですので、あくまで参考までに、ということで。 不明な点などありましたら、またご質問下さい。 (わかる範囲でしたら、お応えします)