14 返信 最新の回答 日時: Feb 7, 2011 9:01 PM ユーザー:AU

    検索方法について

    AU

      タイトル

      検索方法について

      フォーラムに投稿

      はじめまして。

      FileMaker Pro 11 Advanced (Win)を使用しています。

      スクリプトなどに関しては初心者です。

      書類タイプ別に40個の日付フィールドがあり、それぞれには書類の日付が入力されています。

      書類更新作業のため、日付2009/7/1~209/12/31に該当するものを検索したいのですが、スクリプトなどで検索が出来ないかと投稿させていただきました。(今はスタッフが検索条件追加で1つ1つやってる状態です・・)

      よろしくお願いします。

        • 1. Re: 検索方法について
          sago350@未来Switch

          もう少し条件をお教え下さい。

          40個のフィールドの何れかに2009/7/1~209/12/31に該当するもの検索したいのでしょうか?

          なので、検索を40回繰り返さないといけないので、大変。ということかなと想像しています。

          または、日付の期間での検索方法が解らないのでしょうか?

          であれば、「2009/7/*」と入力すれば7月分を検索することができます。

          それをスクリプトで自動化するには以下の様なスクリプトを書けばいいかと。

          検索モードに切り替え[]フィールド設定[テーブル::日付; Year( Get( 日付 ) ) & "/" & Month( Get( 日付 ) ) &"/*"]検索実行[]

          • 2. Re: 検索方法について
            AU

            コメントありがとうございました。

            「40個のフィールドの何れかに2009/7/1~209/12/31に該当するもの検索したいのでしょうか?」

            これがやりたいので、検索条件を繰り返さないとならないので苦労しています。

            現在はスクリプトでフィールドへ移動、検索条件の貼り付け を40個作ってやっていますが、

            便利な方法を知りたいです。

            よろしくお願いします。

            • 3. Re: 検索方法について
              sago350@未来Switch

              こんな感じの繰り返しの計算フィールドを用意しておけばいいかと思います。
              計算結果は"日付"で。下記サンプルでは4つしか日付フィールドがありませんが、同じように40個設定してください。40個の繰り返しが設定された繰り返しフィールドはどこで検索しても、40個のいずれかに当てはまれば検索にヒットします。

              Let([
              %list日付 =
              Extend( 生年月日 ) & "¶" &
              Extend( 届出日 ) & "¶" &
              Extend( 登録日 ) & "¶" &
              Extend( 作業日 )
              ];

              GetValue ( %list日付 ; Get ( 計算式繰り返し位置番号 ) )
              )

              もう少し、エレガントな方法もあるような気もしますが、私が思いついたのこの方法です。

              • 4. Re: 検索方法について
                Shin

                スクリプトで検索条件を作ってしまうのが、通常の方法でしょうね。

                40行のフィールド設定を行っても良いですが、その日付けフィールドのフィールド名に規則性があるのでしたら、デザイン関数でレイアウト上にあるフィールド名を取込み、名前を指定してフィールド設定 ステップを使っていけば良いでしょう。

                ただし、同じような日付けフィールドが多数あることが最大の問題だと思いますが。それは、どのような設定を入力するためのフィールドなんででしょうか。

                • 5. Re: 検索方法について
                  Ozaki

                  ちょっと違った視点の投稿です。

                  検索条件が「●年」もしくは「●年●月」という月単位でしたら「クイック検索」が便利です。

                  「ステータスツールバー」の右側にある「クイック検索バー」に「2011/9」と入力してみてください。

                  2011年9月に該当するレコードが検索されるはずです。

                  但し、範囲の検索(●月~●月)ではこの方法は使えません。

                  複数月の場合は、単月で検索した結果に別途作ったフィールドにフラグ値を全置換し、最終的にフラグを立てた値を検索するという手があります。

                  最近「クイック検索」に凝っています。別途ご紹介したいと思っています。

                  • 6. Re: 検索方法について
                    AU

                    sago35さん

                    コメントありがとうございます。

                    後程試してみたいと思います。

                    • 7. Re: 検索方法について
                      AU

                      Shinさん

                      コメントありがとうございます。

                      この日付フィールドですが、
                      国ごとに必要な書類分フィールドがあり、顧客から回収した書類の日付が入力されます。
                      書類の中には1年や2年で更新する必要があるものがあり、更新すべき書類を期間を入力して検索しています。 

                       イギリス書類A イギリス書類B
                       フランス書類A フランス書類B フランス書類C
                       

                      フィールド名はこのような感じになっています。
                      レコードは顧客単位です。

                      • 8. Re: 検索方法について
                        AU

                        Ozakiさん

                        コメントありがとうございます。

                        検索条件は200010/01/01~2/07/31などで、範囲はフィールドによって異なります。

                        上記のコメントに書きましたが、更新必要書類を検索するため、
                        検索作業は半年に一回行い、その都度検索条件が変わります。

                        • 9. Re: 検索方法について
                          Ozaki

                          こんにちは

                           

                          クイック検索とは別の考え方です。

                           

                          ファイルメーカーにおいて複数の場所を一度に検索する場合や複数の条件を検索する場合

                          1)検索する側に工夫する

                          2)検索される側に工夫する

                          という二種類の考え方があります。

                           

                          2)の考え方でしたら、sago35さんの作り方が良いと思います。

                           

                          1)での考え方でしたら、

                          検索条件を入力したら40種類のフィールドをスクリプトで条件を設定して探すという手段があります。

                          但し、40個のフィールドを一々指定するのも大変ですよね、そこを便利にするテクニックは有ります。

                           

                          手順を記します。

                           

                          ・検索対象の40の日付に1〜40のタブ順を設定します

                          「レイアウト」→「タブ順設定」

                           

                          ・日付フィールド「検索開始日」「検索終了日」を作り、グローバル格納にします。

                          (フィールドの「オプション」→「データ格納」のウインド上部の「グローバル格納」のチェックを入れます)

                           

                          ・スクリプト「一括検索」を作ります。

                          ステップは以下です。

                           

                          変数を設定 [名前:$開始日 値:検索開始日]

                          変数を設定 [名前:$終了日 値:検索終了日]

                          検索モードに切り替え []  ← 一時停止にはしない

                          変数を設定 [名前:$Counter 値:1] 

                          フィールドに移動 [日付1] ← タブ順に設定した最初のフィールド名です。

                          Loop

                          フィールド設定 [値:$開始日&"..."&$終了日] ←

                          フィールド移動:次の

                          変数を設定:「$Counter」内容:$Counter+1

                          EndLoopIf「$Counter ≥ 40」

                          新規レコード/検索条件

                          次のフィールドへ移動

                          End Loop

                          検索実行

                           

                          ・抽出時に条件を「検索開始日」と「検索終了日」にそれぞれ入力し、スクリプト「一括検索」を実行。

                           

                          検索する対象のフィールド(日付)が増える場合はそのフィールドをレイアウトに起き、タブ順を設定し、

                          スクリプト「一括検索」のEnd Loop Ifの40の数字を増加した数だけ加えますと対応できます。

                          • 10. Re: 検索方法について
                            Shin

                            やはり、ファイルン構造を変えておくのが最善ではないでしょう。(将来の事も考えて)

                            書類マスターを作ります。書類の種類(番号)、書類の有効期限を設定していきます。

                            顧客の書類テーブルを作ります。顧客番号、書類種別番号、提出日付を持たせ、書類マスターの有効期限を参照し、その書類の有効期限を計算させておきます。

                            有効期限切れのチェックには、書類テーブルでその有効期限を検索し、関連レコードに移動で顧客テーブルへ移動します。

                            今のファイル構成からの以降も、インポートを40回繰り返すだけですので、将来の管理の手間を考えると、そんなに面倒な物ではないと思いますが。

                            • 11. Re: 検索方法について
                              SHO

                              ・チェック用のフィールド、検索開始日のフィールド、検索終了日のフィールドを作る。
                              ・日付が該当する期間にあった場合はチェック用のフィールドにチェックが入るようにする。
                              ・チェック用のフィールドで検索する。
                              では、どうでしょうか。

                              • 12. Re: 検索方法について
                                AU

                                sago35さん

                                以前教えていただいた下記方法ですが、

                                Let([
                                %list日付 =
                                Extend( 生年月日 ) & "¶" &
                                Extend( 届出日 ) & "¶" &
                                Extend( 登録日 ) & "¶" &
                                Extend( 作業日 )
                                ];

                                GetValue ( %list日付 ; Get ( 計算式繰り返し位置番号 ) )
                                )

                                エラーとなり計算式に入れてフィールドを作成することが出来ませんでした。

                                計算式について詳しくないので、何を修正すれば良いかわからず、、。

                                ただ今まで上記のような計算式の方法があることを知らなかったので、勉強になりました。ありがとうございました。

                                • 13. Re: 検索方法について
                                  AU

                                  Shinさん

                                  ファイル構造の変更..それが良いのでしょうね。

                                  ただファイルが出来て20年弱、テーブル分けもされず1つのテーブルで出来ているので、いろんな顧客情報が一緒になっていて、

                                  日々更新されるファイルなだけに、ファイル構造に手を入れるのに躊躇してしまいます。

                                  教えていただいた方法を別のファイルでテストを重ねて、将来公開しているファイルで実行出来ればと思います。

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

                                  • 14. Re: 検索方法について
                                    AU

                                    sago35さん

                                    エラーを修正することが出来ました。単純なミスで{が含まれているのが原因でした。