• ベストアンサー

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

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

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

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

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

nuu3024
質問者

お礼

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

関連するQ&A

  • access フォーム間で情報が引き継がれない

    初心者です、よろしくお願いします。 仕様環境 WinXP Access2002 請求管理のシステムを作っています。 テーブルには 顧客マスタ(主キーは顧客番号でテキスト型 例:0001等) 請求マスタ(主キーは請求番号でテキスト型 例:A0001等) 明細マスタ(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客マスタ(1)→(多)請求マスタ(1)→(多)明細マスタになっています。 顧客マスタを元にしたフォーム(顧客入力フォーム)に顧客情報を入れて、 「請求書作成ボタン」を作り、そのボタンを押すと別のフォーム(請求書作成フォーム)に 飛ぶようにしているのですが、その際に顧客入力フォームに入力した情報を 引っ張っていくようにしたいのですが、うまくいきません。 ちなみに顧客マスタと請求マスタのリレーションは”顧客番号”でつなげています。 請求書作成フォームは請求書作成クエリから成り、 その中で顧客番号(テーブル:顧客マスタ)の抽出条件に[Forms]![顧客入力フォーム]![顧客番号]と 入れて”顧客番号つながり”で飛ぶようにしているのですが、 請求書作成フォームは開くのですけど、項目はすべて空白です。 またいろいろレコードを追加している内に、請求番号が既にあるものに対しては顧客情報も引き継がれることが判明しました。 構文が間違っているのでしょうか? 混乱しています、お助けください。

  • Accessフォームウィザードでフォームとサブフォームを同時に作成する場合

    お世話になります。 Accessのフォームウィザードを使って フォームとサブフォームを同時に作成するとき、 サブフォームは、埋め込む形式(サブフォームがあるフォーム)とリンクされた形式(リンクされたフォーム)の2つあります。 埋め込み・リンク 両方を作成して試したみたところ 埋め込みの方は、サブフォームに新しいレコードを追加するとテーブルの方にも反映されましたが、リンクの方は、サブフォームに新しいレコードを追加してもテーブルにレコードが追加(反映)されませんでした。 どう違うのかがわかりません。 どうぞよろしくお願いいたします。

  • ACCESS フォームにデータ入力できません

    まず支払一覧と発注一覧のテーブルを作成後、そのフォームを作成し、そこからデータを入力できるようにと考えていたのですが、入力しようとしても上書きできません。各一覧には、既にリレーションシップおよび内訳金額と摘要が書けるサブフォームと、それらの合計金額のサブフォームが付けてあります。何をどうすれば、フォーム上にデータを上書きすることができるでしょうか。簡単なことで申し訳ございませんが、どなたか教えてください。。宜しくお願いします。

  • アクセス2000でフォームに入力したレコードを表示させたいのです

    初歩の質問ですがよろしくお願い致します。 顧客TBを作成して、それを単票フォームで入力 できるようにしています。 同一フォームにサブフォームを設けて入力したレコードを 登録毎にサブフォームへ一覧表示させるにはどうしたらよいでしょうか サブフォームに直接入力していくと可能なのですが できれば上記のような形で行ないたいのです。 それとサブフォームでは編集できないようにすることは出来ますか? 宜しくお願い致します

  • ACCESSでデーフル作成入力フォームで入力しながら、クエリのデータを参照したい

    ACCESSで売上明細テーブルを作成し、入力用のフォームを作成しました。他に顧客マスタテーブルがあります。売上明細には顧客CDフィールドがありますが、顧客名等はマスターに存在するため設けてません。しかし売上明細入力時に顧客CDを入力した時点で顧客名の確認がしたいのです。そこで入力フォームの顧客CDの隣に非連結でテキストボックスを作り、そこに顧客名を表示したいのです。売上明細には顧客名のフィールドは追加したくありません。ただ参照したいだけです。顧客マスタと売上明細で顧客CDをキーにクエリを作成し、明細に対応する顧客情報は顧客情報検索というクエリで作成済みです。入力フォーム画面の非連結のフィールドのプロパティのコントロールソースに =DLookup("[顧客名]","顧客情報検索","[顧客CD] =" _ & Forms![売上明細入力Form]![顧客CD]) と表記しましたがエラーになります。 最初はコントロールソースに直接顧客情報検索クエリの顧客名フィールドを表記し、フォーカス取得時にクエリを開くマクロを実行していました。でもやはり表示されませんでした。 顧客名の設定をどのように設定すればいいのですか? コントロールソースでの設定だけでは無理なのでしょうか? よろしくお願いします。

  • Accessにてフォームを開く時にエラー

    Accessにて、メイン・サブ形式のフォームを作成しています。 サブフォームには、取引の一覧を表形式で入力していきます。 フォームを開く時に、新規のレコードから入力できるようにマクロで設定しましたが、 オブジェクト”サブフォーム名”が開いていません というメッセージが表示されうまくいきません。 ◆マクロ◆ フォームを開く ・・・ メインフォーム名 レコードの移動 ・・・ サブフォーム名            新しいレコード 上記のように設定しています。 マクロでは、不可能なのでしょうか? よろしくご教授願います。

  • ACCESSのメインフォームとサブフォームについて

    ACCESSで、受注伝票のようなものを作成したいと思っています。受注伝票フォームに受注明細のサブフォームを埋め込んだようなフォームを作ろうとしています。その際、受注伝票と明細に受注コードのフィールドを設け関連づけたいのですが、メインフォームに受注コードを入力したらサブにも同じコードが自動的に振られるようなことはできるのでしょうか。 出来ないのであれば、どのように作ればよいのでしょうか。

  • Accessのサブフォームからフォームフィルタを使ってメインフォームも含めたレコードの抽出が出来ないのは何故でしょうか?

    フォームフィルタを利用してサブフォームに入力されている値でレコードの抽出を行いたいのですが、うまくできません。 メインフォームが持っているレコード全てを持ってきます。 メインフォームに含まれているデータが100件なら、それ全てを表示してしまうということです。 私が抽出したいレコードは2件だけです。 メインフォームからフォームフィルタを利用して抽出すると正しい結果が得られます。 これはどうしてでしょうか? サブフォームへの設定が何か足りないのでしょうか? 親・子のフォームのテーブルは同一のものです。 カテゴリーで親と子にフォームを分けました。 親にはクエリはなくて、リレーションシップしたテーブル数種から直接フォームにひっぱってあります。 子は一つのテーブルからクエリを作って、そのクエリからフォームに引っ張っています。 Access2003です。 どなたかご教示いただきますようお願いいたします。

  • アクセスでお問い合わせDBを作成したいが

    顧客テーブルのID(オートナンバー)と、問合せ入力テーブルの親ID(数値型)をリレーションシップで一対多の設定をしています。 顧客テーブルから作成したフォームからコマンドボタンで新規の問合せ入力フォームを開きたい(サブフォームは別の用途に使用したいので使いたくありません)のですが、フィルタがかかって入力できず、顧客テーブルのIDが問合せ入力フォームのIDに自動的に入りません。どのようにしたらよいのでしょうか? とても困っています。お願いします。

  • ACCESS2000のフォームについて

    フォーム(←単票形式の)のデザインビューで、ツールボックスから、コマンドボタンウィザードを使い、コマンドボタンを作りましたが、ウィザードの最後のボタン名を指定するところで、漢字変換ができず、困っています。 いつもひらがなにしか入力が出来ないのですが、ここで直接漢字入力にするにはどういう処置をすればいいですか。 それから、追加の質問ですが、 作ったコマンドボタン(←レコード削除用)で、レコードを削除しようとしたところ、「リレーションシップが設定されたレコードが、テーブルにあるため、レコードの削除や変更を行えません。」と、エラーメッセージが表示されます。 レコードをフォームから削除するにはどうすればいいですか。 (※無理にしたいわけではないが、そういう命令も勉強の一環でして見たいのです。) 宜しくお願いします。

専門家に質問してみよう