3 返信 最新の回答 日時: Sep 2, 2015 3:01 AM ユーザー:user14047

    参照先テーブルへの新規レコード登録について

    user24297

      お世話になっております。

      (FM Pro13+Win7)

       

      私が読んでいるFMの本には載っておらず、また情報検索してみましたが検索の仕方が悪いのか欲しい情報が見つかりませんでしたので、こちらにて質問させていただきます。

       

      今現在、テーブルAのフォーム上に、テーブルB(リレーション済)のデータの参照フィールド①を作成しています。

      このフィールド①はドロップダウンリストで、テーブルBのデータ内容を選択できるようにしました。

      実現したいことは、フィールド①で選択するテーブルBのデータ内容に該当データが無い場合、フィールド①に入力したデータがテーブルBに反映するようにしたいです。

      どのような設定にすれば実現できるのでしょうか?

       

      リレーションシップの「このリレーションシップを利用してこのテーブルでのレコード作成を許可」を、テーブルAとB共に、オンにしています。

      しかし、テーブルBには、フィールド①で入力した内容は、反映されません。

       

      もちろん、テーブルBのフォームを作成してデータ入力すればよいのですが、ユーザーの手間を考えてそれは行わない予定です。

       

      恐らく初歩過ぎる質問かもしれませんが、すみません、教えていただけると助かります。

      どうぞ宜しくお願いします。

        • 1. Re: 参照先テーブルへの新規レコード登録について
          user14047
          テーブルB(リレーション済)のデータの参照フィールド①を作成

          とありますが、

          • 「テーブルB::フィールド①」のフィールドをテーブルA のレイアウトに置いている
          • 「テーブルA」に、ルックアップか、計算値自動入力( = テーブルB::フィールド① )のフィールドを作成し、テーブルA のレイアウトに「テーブルA::フィールド①」を置いている

          のかどちらですか?

           

          前者なら、関連レコード(テーブルA のリレーションキーと同じ値を持つ テーブルB のレコード)がない場合、「このリレーションシップを利用してこのテーブルでのレコード作成を許可」にチェックが入っていますので、テーブルB に必ず新しいレコードが作られます。

           

          後者の場合、テーブルA::フィールド① と テーブルB::フィールド① は同じではないので、テーブルA::フィールド① の値を変更しても テーブルB には反映されません。

          onObjectSave スクリプトトリガを利用して、スクリプト経由で テーブルB に値を反映させるようにする必要があります。

          • 2. Re: 参照先テーブルへの新規レコード登録について
            user24297

            早速返信くださり、ありがとうございます。(いつもありがとうございます。)

             

            後者です。

            「テーブルA」のフィールド①に、値一覧でテーブルB::フィールドを参照して表示しています。

            そうすると、テーブルBには反映されないのですね。ありがとうございます。

            スクリプトで実現しようと思います。

             

            前者で行うとすると、

            テーブルBには反映されますが、テーブルAのフィールド①には反映されるようにできますか。

            (今フォームにそのように設定変更してみたのですが、テーブルAにはデータが反映されず。設定を見直してみます。)

             

            すみません、このあたりの理解が不十分だということが分かりました。

            スクリプト含め、再トライしてみます。

             

            どうもありがとうございました。

            • 3. Re: 参照先テーブルへの新規レコード登録について
              user14047
              前者で行うとすると、
              テーブルBには反映されますが、テーブルAのフィールド①には反映されるようにできますか。

              テーブルA ではなく、テーブルB のフィールド① を直接編集することになりますから、1対1のリレーションでなければ、他のレコードの値も変わってしまいますので、この場合の使い方としては不適切です。

               

              onObjectSave でテーブルAの フィールド①  に値が保存された時に、テーブルB の値を検索し、値がヒットしなければ テーブルB に新規レコードを追加というようなスクリプトで対処されるのがいいかと思います。