9 返信 最新の回答 日時: Mar 20, 2017 10:08 PM ユーザー:beginners

    Loop

    beginners

      お世話になります。

      (Fm15 Advancedを使用しております)

       

       

      Loopを使用しています。

      LoopでテーブルAのあるフィールド項目の値が、別のテーブルBに何レコード存在しているのか件数を求め、

      テーブルAに件数を入れる流れです。

      テーブルBを検索するためにレイアウト切り替えを行っていますが、レイアウト切り替えしたせいなのか?、上手くいかないのです。

       

       

      *****↓↓↓↓↓↓***こんなスクリプトを使っています*****↓↓↓↓↓******

       

      「レコード/検索条件/ページへ移動」[最初の]

      Loop

       レイアウト切り替え(テーブルB) ・・・・・・・ 別のレイアウト(テーブルB)から件数を求めるためにレイアウトを開きます。

       全レコードを表示

       検索実行  ・・・・・・・・・・・・・・・・・・ 件数を求めます

       変数を設定 ・・・・・・・・・・・・・・・・・・ 件数を $件数 へ代入します

       レイアウト切り替え(元レイアウト) ・・・・・・ Loop元のレイアウトに戻ります。(その際、画面のレコード表示は、該当レコードの1件が表示されています。

       フィールド設定 ・・・・・・・・・・・・・・・・ $件数をセットします。

       全レコード表示 ・・・・・・・・・・・・・・・・ 1件だけ表示されているので、全レコード表示させました

       レコードのソート ・・・・・・・・・・・・・・・ Loop時のソート順ではないため、Loop時のソート順にしました

       レコード/検索条件/ページへ移動[次の;最後まできたら終了]

      End Loop

      ********************************************************

       

       

      【現象】(スクリプトデバッガにて分かっている内容です)

      ・テーブルBに件数を求めることをしなければ、Loopは正しく、検索されていることは確認済みです。

      ・テーブルBへの件数を求めることは、正しく行われています。

      ・[次の]レコードを参照に行くときに、

        常に、1件目から2件目に移行するようになってしまって、永久Loopになっています。

       

      ※別のレイアウトへ飛ぶことで、Loopの制御ができなくなるものなのでしょうか

      ※初心者のため、そもそも根本的にできない事をお聞きしているのかも知れません。すみません。

       

      どうぞ、よろしくお願い致します。

        • 1. Re: Loop
          user14047

          元のレイアウトに OnLayoutEnter のスクリプトトリガが仕込まれていませんか?

          • 2. Re: Loop
            beginners

            いつもありがとうございます。

             

            確認しましたが、

            元のレイアウトには、 OnLayoutEnterも、その他も、何も設定していない状況でした。

             

            よろしくお願いします

             

            • 3. Re: Loop
              sago350@未来Switch

              トリガや他の条件は解りませんが、自分ならこんな感じのスクリプトになるかなと思います。

               

               

              *****↓↓↓↓↓↓***こんな感じかなぁ*****↓↓↓↓↓******

               

              「レコード/検索条件/ページへ移動」[最初の]

              レコードのソート

              Loop

               変数を設定・・・・・・・・・・・・・・・・・・・ 検索条件を設定

               レイアウト切り替え(テーブルB) ・・・・・・・ 別のレイアウト(テーブルB)から件数を求めるためにレイアウトを開きます。

               検索実行  ・・・・・・・・・・・・・・・・・・ 件数を求めます(さっき変数に入れた検索条件を設定)

               変数を設定 ・・・・・・・・・・・・・・・・・・ 件数を $件数 へ代入します

               レイアウト切り替え(元レイアウト) ・・・・・・ Loop元のレイアウトに戻ります。(その際、画面のレコード表示は、該当レコードの1件が表示されています。

               フィールド設定 ・・・・・・・・・・・・・・・・ $件数をセットします。

               レコード/検索条件/ページへ移動[次の;最後まできたら終了]

              End Loop

              ********************************************************

              • 4. Re: Loop
                beginners

                いつもありがとうございます。

                 

                スクリプトの指定順番の情報、ありがとうございます。

                 

                ご教授頂きました流れで指定していると思うのですが見直ししてみます。

                • 5. Re: Loop
                  user19752

                  レイアウトを切り替えずにリレーションでカウントできないのですか?

                   

                  元のレイアウトに戻った時に

                  1件だけ表示されているので、全レコード表示

                  が必要なのが変です(それでトリガを疑われている)が、そういう場合は

                  新規ウィンドウ>レイアウト切り替え>カウントなど>ウィンドウを閉じる

                  という流れにすると対象レコードを変えずに作業できます。

                  • 6. Re: Loop
                    user14047

                    あああ、10 行目に [レコードのソート] スクリプトステップが入っているじゃないですか...

                    9 行目の [全レコード表示] も 10 行目の [レコードのソート] もここには要らないかと。

                    (どんなソート条件かわかりませんが、条件によってはこのステップの段階で 1 レコード目へ移動してしまう可能性があります)

                     

                    自分だったら...次/前のレコードへ移動オプションは使わないので、こんな感じですかね。

                     

                    でも...レイアウトを切り替えて検索するようなことしなくてはだめですか?

                    なんらかのリレーションを作成しておいて Count 関数で元のレイアウトのオカレンスから

                    値をもってこれるようにできませんかね?

                    そうできるのであれば、そうした方がレイアウトの切り替えが発生しない分動作が速くなりますよ。

                    場合によっては、Loop せずに、全置換スクリプトステップの 1 行だけで事足りるかもしれません。

                     

                    レコードのソート [ 記憶する ; ダイアログあり: オフ ]

                    変数を設定 [ $foundCount ; 値: Get ( 対象レコード数 ) ]

                    変数を設定 [ $i ; 値: 0 ]

                    Loop

                      Exit Loop If [ $i ≥ $foundCount ]

                      変数を設定 [ $i ; 値: $i + 1 ]

                      レコード/検索条件/ページへ移動 [ ダイアログあり: オフ ; $i ]

                     

                      # ↓ ↓ ↓ ↓ ↓ ここからレコード毎の処理 ↓ ↓ ↓ ↓ ↓

                      変数を設定 [ $searchQuery ; 値: 検索条件 ]

                      新規ウインドウ [ スタイル: ドキュメント ; 名前: "作業用ウインドウ" ]

                      レイアウト切り替え [ 「テーブルB」 (テーブルB) ]

                      検索実行 [ 記憶する ]

                      変数を設定 [ $count ; 値: Get ( 対象レコード数 ) ]

                      ウインドウを閉じる [ 名前: "作業用ウインドウ" ; 現在のファイル ]

                      # ウインドウを閉じるので元のレイアウトがカレントオカレンスのまま

                      フィールド設定 [ 検索結果の件数を設定するフィールド ; $count ]

                      # ↑ ↑ ↑ ↑ ↑ ここまでレコード毎の処理 ↑ ↑ ↑ ↑ ↑

                     

                    End Loop

                    変数を設定 [ $i ]

                    • 7. Re: Loop
                      beginners

                      いつもありがとうございます。

                      対象レコードを変えずに作業できるんですね。

                      試してみます。

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

                      • 8. Re: Loop
                        beginners

                        引き続き、ありがとうございます。

                         

                        試してみます。

                        色々とアドバイス例の記述、ありがとうございました。

                        • 9. Re: Loop
                          beginners

                          user14047さん

                          user19752さん

                          sago350@未来Switchさん

                           

                          いつも助かっております。

                          なんとか上手くいきました。

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