12 返信 最新の回答 日時: Apr 25, 2017 4:46 PM ユーザー:user27645

    関連レコードへ移動での101エラー

    user27645

      お世話になります。

       

      関連レコードへ移動の挙動について伺いたいです。

       

      現在、大元テーブル、関連テーブル1、関連テーブル2があります。

       

      大元テーブルから関連テーブルに関連レコード移動(関連レコードのみ表示・現在の対象レコード内の全てのレコードを照合)したときに、

      大元テーブルの対象の1レコード目の関連レコードがないと、101エラーが発生してしまいます。

      2レコード目と3レコード目の関連レコードはある状況です。

       

      関連レコード移動(関連レコードのみ表示・現在の対象レコード内の全てのレコードを照合)は、

      こういう仕様なのでしょうか?

        • 1. Re: 関連レコードへ移動での101エラー
          sago350@未来Switch

          関連レコード移動(関連レコードのみ表示・現在の対象レコード内の全てのレコードを照合

          を実行したアクティブなレコードの関連レコードが無い場合はエラーが返ってしまうようですね。

          例えば、関連レコードが存在するレコードで実行するとエラーは返さない。

           

          私も知りませんでした。

          • 2. Re: 関連レコードへ移動での101エラー
            user27645

            ご回答ありがとうございます。

             

            やはりそういう仕様なのですね。

             

            現在、関連レコードへ移動した後にエラー処理をしているのですが、

            対象レコードがあるのに101エラーが出てしまうため、

            その後の処理が行えない状況という状況です。

             

            これを回避するために、関連レコードの対象レコードがあるかExecuteSQLで件数を拾ってきて、

            if  $err = 0 or ($err = 101 and $cnt > 0)

                正常処理

            else

                エラー処理

            end if

            として、関連レコードへ移動が正常に行われた場合と、

            アクティブレコードの関連レコードが存在しないが非アクティブ対象レコードの関連レコードが存在する場合は、

            正常処理を行うようにしています。

             

            他になにか良い方法はありますでしょうか?

            • 3. Re: 関連レコードへ移動での101エラー
              sago350@未来Switch

              そうですねえ、他の方法としては

              1. 集計フィールドの一覧でキーを拾ってくる
              2. 拾ってきたキーをグローバルタイプのフィールドに入れる
              3. そのキーでリレーションを組む

              構造的にはExecuteSQL使った方がシンプルかなと思います。

              1 人中 1 人が役に立つと言っています
              • 4. Re: 関連レコードへ移動での101エラー
                user14047

                仕様というよりバグっぽい気がしますが、.fp7 の頃から一貫した動きなので仕様なんでしょうね...

                (FileMaker Pro 11 から 12,13,14,15 と試してみました)

                 

                現在の対象レコード内の全てのレコードを照合しても、0 レコードの場合、

                • レイアウトの切り替えが行われない
                • 違うエラー番号(401:検索条件に一致するレコードがありません)が返ってくる

                ので、このあたりを利用したエラー処理をしてみてはいかがでしょうか?

                 

                サンプルファイルを添付してみました。

                • 5. Re: 関連レコードへ移動での101エラー
                  user27645

                  そのやり方もありですね。

                  教えていただき、ありがとうございます。

                  あまり大きな修正を加えたくないので、

                  今回はExecuteSQLで実現しようと思います。

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

                  • 6. Re: 関連レコードへ移動での101エラー
                    user27645

                    ご回答ありがとうございます。

                     

                    昔からそのような動きをしていたのですね...

                     

                    サンプルありがとうございます。

                    確認してみます。

                    • 7. Re: 関連レコードへ移動での101エラー
                      user19752

                      移動するレコードがない場合は401のエラーになりますね。

                      たぶん内部処理がsagoさんの「ほかの方法」みたいになってるからなんでしょうけど

                      (各レコードで関連レコードを探す・探した結果で検索する)

                       

                      あるいは、この例では移動すればレイアウトが切り替わるのでそれを使って判別することもできます。

                      • 8. Re: 関連レコードへ移動での101エラー
                        user27645

                        頂いたサンプル拝見いたしました。

                        提供していただいたサンプルは、

                        よりシンプルなやり方なので、これでいこうと思います。

                         

                        ただ、気づいたことがありまして、

                        大元の対象レコードが全く関連レコードがないと401エラーが返ってきて、

                        大元の対象レコードの中に関連レコードがないものとあるもの両方ある場合には101エラーが返ってくるようでした。

                         

                        401エラーの場合は、特に問題ないため、

                        101に変更して、頂いたスクリプトを使用させていただきたいと思います。

                         

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

                        • 9. Re: 関連レコードへ移動での101エラー
                          user19752

                          401エラーの場合は、特に問題ないため、

                          普通はエラー(結果が0でない)なら中止、とするけども、このスクリプトでエラーが101の場合は本来ならエラーじゃないので

                          エラーが0または101なら続行

                          ということですよね。

                           

                          エラーが401なら中止

                          とすると他の101以外のエラーの場合も続行してしまう(あるのかどうか?)

                          1 人中 1 人が役に立つと言っています
                          • 10. Re: 関連レコードへ移動での101エラー
                            user27645

                            ご回答ありがとうございます。

                             

                            そうですね。

                            たしかに他の101エラーのことも考えられるますね...

                             

                            そうなるとやっぱり、

                            ExecuteSQLで集計し、関連レコードの件数があれば、

                            「関連レコードへ移動」のスクリプトを実行して、

                            そこでエラーが 0 or 101 の場合のみ正常処理を行う、

                            とするのがよろしいですかね?

                            • 11. Re: 関連レコードへ移動での101エラー
                              user14047
                              If [ Exact ( $currentLayoutName ; Get ( レイアウト名 ) ) or $err = 401 ] 
                                # error401 のエラー処理
                                カスタムダイアログを表示 [ "エラー" ; $err & " : " & ErrorMsg ( $err ) ] 
                              Else If [ not ( $err = 101 or $err = 0 ) ] 
                                # error101 以外のエラー処理
                                カスタムダイアログを表示 [ "エラー" ; $err & " : " & ErrorMsg ( $err ) ] 
                              Else
                                # 通常の処理
                              End If
                              

                              101 以外のエラー処理を Else If に追加するだけでいいような気がします。

                              • 12. Re: 関連レコードへ移動での101エラー
                                user27645

                                返信遅れまして、すみません。

                                 

                                この方法で実装しようと思います。

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