• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessでのエラー)

Accessでのエラー

このQ&Aのポイント
  • Access修行中の身で、勉強をかねて書類BOXのデータベースを作成中です。
  • クエリで複合テーブルを作成し、データを入力しようとすると、エラーが発生します。
  • 保存箱IDは入力しなくてもいいフィールドにしたいが、子テーブルに新たにレコードが追加されるようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> 保存箱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 ※「リスト外イベント」は、「子テーブルにないデータだった場合に即座に追加」するための   一手段ですので、あくまで参考までに、ということで。 不明な点などありましたら、またご質問下さい。 (わかる範囲でしたら、お応えします)

shinachobi
質問者

お礼

詳しい回答どうもありがとうございます。 上の件は、速攻解決いたしました。 下の件は、時間がかかりそうなので(なにぶん修行中の身なので)、 先にお礼を述べさせていただきます。 本当にどうもありがとうございました。

その他の回答 (1)

  • arare2005
  • ベストアンサー率31% (63/199)
回答No.1

テーブルの構成、結合方法(キー)も悪い様です。 記載の通りであれは、関連付けられるキーは1:Nのキーで、結合するキーは保存箱名になるかと思います。が、日本語をキーにすると後々、更新等で不具合が出そうですが... 推測ですが、親子関係を築きたい(親:ヘッダー、子:明細)のであれば、子に親のオートナンバーを与えれば済みます。これが1番シンプルな気がいたしますが... ご質問の意図されている事と違いましたら、ご容赦下さい(^^;

shinachobi
質問者

お礼

すばやい回答どうもありがとうございます。

shinachobi
質問者

補足

ご推察のとおり、保存箱名と保存箱IDを別としたのは、日本語を主キーにしないほうがいいと思ったからです。 この場合、親と子の関係が、∞対一なので、子に親のオートナンバーを与えるのは無理だと思うのですが。私の親と子という言い方がおかしかったですね。メインテーブルとサブテーブルという意味で、親と子という言葉を使っておりました。