11 返信 最新の回答 日時: Nov 15, 2015 1:08 AM ユーザー:nkk47

    リレーションシップについて

    nkk47

      いまさらお恥ずかしい話なのですが、どうにも行き詰まってしまい、ご相談に上がりました。

       

      テーブル:A

      ・_1 (計算) = 1

      ・性別(テキスト)

       

      テーブル:B

      ・_1 (計算) = 1

      ・測定値1(計算)= If ( A;;性別 = "男" ; "0~2" ; "0~5" )

      ・測定値2(計算)= "130 mm"

      ・測定値3(計算)= "85 mm"

       

      リレーション

       A;;_1 = B;;_1

      ・このリレーションシップを利用して・・・などはすべてチェック無し。

       

      上記のような構成で、テーブルAの「性別」が入力された時、その値に対応した値が「測定値1」に返されるようにしたいだけなのですが、フィールド「測定値1」は空白のままです。

      「測定値2」「測定値3」は表示されています。

       

       

      作業環境

      Windos Vista HP SP2

      FileMaker PRO 11 0v3

       

      ご教示の程宜しくお願い致します。

        • 1. Re: リレーションシップについて
          Shin

          _1 というフィールドがリレーションキーなのでしょうか。

          テーブルA側の、_1 というフィールドの索引が設定されていないためだと思います。

          • 2. Re: リレーションシップについて
            nkk47

            Shin さん

             

            早々にありがとうございます。

            設定は下記のようになっております。

             

            sakuin_A.JPGsakuin_B.JPGLayout_A.JPG

            • 3. Re: リレーションシップについて
              user14047

              A テーブルに 2 レコード以上のレコードがあり、1レコード目の性別フィールドが空になっているかと思います。

              測定値1の計算フィールドを B テーブルに分けている意味がわかりません。

              • 4. Re: リレーションシップについて
                nkk47

                user14047 さん

                 

                テーブルAのレコードは1つだけです。

                レイアウトAにおいて、新規レコード作成をすると、_1  に 1  が入り、性別の入力をするのですが、「男」と入力しても、関連フィールドの筈の「B;;_1」「B;;測定値1」「B;;性別」は空白のままです。

                • 5. Re: リレーションシップについて
                  user14047

                  この構成だと、常に A テーブルの 1 レコード目の値を元に B テーブルの計算式が評価されますので、とても意味のないテーブル構成になっています。

                  A テーブルの値を元に計算させ、A テーブル上のレイアウトにフィールドを置くのであれば、、その計算式を A テーブルにもたせた方がいいかと思います。

                  • 6. Re: リレーションシップについて
                    nkk47

                    質問させていただくにあたり、端折りすぎたようです。

                    構成を変えてみました。

                    一応ファイルもアップしましたので、ご覧頂ければ幸いです。

                    Layout_作業結果.JPG

                     

                    作業結果 テーブル

                    ・_1 (計算) = 1

                    ・氏名 (テキスト)

                    ・測定1

                    ・測定2

                    ・測定3

                     

                    基準値 テーブル

                    ・_1 (計算) = 1

                    ・性別 (テキスト)

                    ・基準値1 (計算)

                    ・基準値2 (計算)

                    ・基準値3 (計算)

                     

                    担当者 テーブル

                    ・氏名 (テキスト)

                    ・性別 (テキスト)


                    リレーションシップは下図のとおりです。

                    Relation.JPG

                     

                    作業結果レイアウトにて、氏名を入力すると、リレーションから「性別」と「基準値」が入力されルというものです。

                    基準値は男女で設定値が異なりますので、計算するために性別が必要となります。

                    基準値2,3のように、男女ともに共通の単なるテキストであればご覧のように表示されますが、計算が必要な

                    基準値1は、男女の判別が出来ない(リレーションがおかしい?)ので値を返さない状態です。

                     

                    http://firestorage.jp/download/8961483825c28f35ebb69ad3be8d41ceff9a5f52

                     

                    宜しくお願い致します。

                    • 7. Re: リレーションシップについて
                      user14047

                      ですから、この構成だと、基準値テーブルの計算式の中で 作業結果テーブルの値を使おうとしても作業結果テーブルの 1 レコード目しか見えないので意味がないです。

                      # 一度、基準値テーブルにレコードを作って確認してみてください。

                      • 8. Re: リレーションシップについて
                        sago350@未来Switch

                        「基準値」テーブルの「基準値1」「基準値2」「基準値3」フィールドを「作業結果」テーブルに定義すればいいんじゃないですかね。

                        「基準値」テーブルを分けている意味って何でしょう?

                        • 9. Re: リレーションシップについて
                          nkk47

                          user14047 さん

                          sago350 さん

                           

                          まとレスで失礼いたします。

                           

                          当初はご指摘のように作業結果テーブル内に基準値フィールド(300以上)がありました。

                          その状態 (作業結果テーブル内に全ての基準値フィールドが存在)では、問題なく表示されていました。

                          上記のファイルはテーブル間のフィールド移動  でお世話になりましたものなのですが、ご照会頂きました資料を読ませて頂きましたら、ひとつのテーブルにあまりにも多くの(単純に数ということではなく)フィールドを作るのはパフォーマンスの低下を招く恐れがあるので避けた方がよいのではという理解をしました。(まだ1,2度読んだ程度ですのでこの理解も誤解かも知れません)

                           

                          で、基準値のような、フィールド数は多いが、今後増減する可能性が低いものについては別テーブルにした方がよいのではと考え、作業する内に今回の件にい詰まった次第です。

                           

                          ※私の考えている操作手順と理想の動き

                          1, 作業結果テーブルに新規レコード作成。

                          2, 作業結果;;氏名を入力。

                          3, リレーションから担当者の性別が「作業結果;;性別」 に返される。(ここからアップしたファイルとは違っています)

                          4, リレーション 「基準値_担当者_性別;;性別 = 作業結果」;;性別 によって 基準値;:性別 に値が入力される。(ここが間違い?)

                          5, 基準値;:性別 を元に 基準値;;基準値1 に計算結果が入力される。


                          user14047 さんのご指摘の検証してみました

                          ・作業結果の氏名を入力

                            この時点では、基準値;:性別 も 基準値;;基準値1 もからの状態です

                          ・基準値レイアウトに移り、新規レコードを作成。

                            性別 も 基準値1 も値が入ったレコードが作成されます。

                          ・作業手順レイアウトに戻って確認すると、基準値;:性別 の箇所は「索引が見つかりません」と

                           なってしまっていますが、基準値;;基準値1 には計算通りの値が入っています。


                          > 作業結果テーブルの 1 レコード目しか見えないので意味がないです。

                          たしかに、再度 作業結果テーブル に新規レコード作成をして、性別の違う氏名を入力しても、基準値;;基準値1 は変わりません。

                          基準値レイアウトに移ってレコードの差宇除を行い、新規レコード作成をすると、上記の値が反映されたレコードが作成され、作業結果レイアウトで確認すると、こちらの値も対応しておりました。

                          これが、「作業結果テーブルの 1 レコード目しか見えない」ということなのですね。


                          基準値フィールドを作業結果テーブルに移せば解決する事は理解できました。

                          ただ、現在のように基準値はひとつのテーブルになっていて、前述の 「私の考えている操作手順と理想の動き」 のような動きをさせるのはなんのメリットもないでしょうか。

                          冒頭でも記述いたし増しように、まだまだ勉強不足の自分には、パフォーマンスはよく分かりませんが、ひとつのテーブルに多数のフィールドがある事は作業しにくいと感じているのと、値の決まったデータなどはひとつのテーブルにした方が良いのではという事で、今回のような作業をしております。

                          • 10. Re: リレーションシップについて
                            user14047

                            基準値テーブルのフィールドは計算式になっていますが、基準が変わるのは性別だけですか?

                            もし性別だけであるのなら、基準値テーブルのフィールドは全てテキストフィールドにして

                            性別 = 男 と 性別 = 女 の 2 レコードを作成して、全ての基準値フィールド(基準値1〜基準値300 ?)は

                            テキストフィールドなり、数字フィールドにします。

                            性別で分岐するような計算式は必要ありません。その代わり 基準値テーブルに 2 レコード作ってください。

                             

                            [検査結果::氏名コード] - [担当者::氏名コード] [担当者::性別] - [基準値::性別]

                            TO.png

                             

                            のような形のリレーションにすれば、検査結果テーブルから基準値を引っ張ることができます。

                            また、計算フィールドに数値や文字列を直接に記述した定数(リテラル)の計算式を書いてしまうと

                            修正が大変になるので、すべて編集できる形の値にしておいた方が後々のメンテナンスが楽になるかと思います。

                            • 11. Re: リレーションシップについて
                              nkk47

                              user14047 さん


                              目から鱗がダダ漏れです。\(^_^)/

                              どうにか希望通りの事が出来たようです。


                              ありがとうございます。