• ベストアンサー

Accessでのフォーム入力エラー

顧客管理を 顧客マスタ 受注明細 入金明細のテーブルを作成し、リレーションシップの設定をしてあります。テーブルには、この形で入力できるのですが、フォームをウィザードを使って作成(サブフォームのリンクされたフォーム)しました。 新規入力することができません。「テーブル’顧客マスタ’にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更をおこなうことはできません。」のメッセージが出ます。 どうしていいのか、わかりません。教えてください。

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

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

以下の前提で、話を進めます: 1)フォームのレコードソースは、親フォームが「顧客マスタ」、サブフォームが「受注明細」「入金明細」。 2)既存の顧客で「受注明細」や「入金明細」を新規入力した場合はエラーは出ないが、新規の顧客を入力してサブフォームでその顧客に対応する受注明細や入金明細を入力しようとすると、質問のエラーメッセージが出る。 <対処方法> サブフォームの編集に移る前に、親フォームのレコードを保存する。 <エラーが出る理由> 新規レコードを追加した場合、他のレコードに移動するか、そのテーブルやフォームを閉じるか、「レコードの保存」を実行するかしてやらないと、そのテーブルにレコードが追加されたことになりません。 テーブルに直接入力した際は、恐らく顧客マスタを閉じるか他のレコード(行)に移動してから、他のテーブルの編集を行ったのではないでしょうか。 それに対し、フォームの場合は同じ画面に表示されているので、上記のようにレコードが編集中で追加されたことになっていないため、質問のようなエラーが生じたのだと思います。 (親フォームのレコードセレクタを表示させる設定にしているなら、そこには編集中のアイコン(鉛筆マーク)が表示されているはずです) なお、「顧客ID」などを設置して編集不可・使用不可・非表示のどれかに設定してリンクフィールドに使用している場合は問題ありませんが、もしリンクフィールド自体のデータが編集可能になっている場合、この問題は新規レコードだけでなくリンクフィールドの編集時にも起き得ますので、マクロでレコード保存を実行する場合は、設置イベントの選択に注意が必要になります。 (フォーム設計者としてのセンスが問われるところですね)

nuu3024
質問者

お礼

ありがとうございました。まだまだ初心者なので理解できない部分がありますが、参考になりました。

すると、全ての回答が全文表示されます。

関連するQ&A