こんにちは!
今回のテーマは、検索のキホンです。
FileMaker(ファイルメーカー)では、検索がすべてのキホンといっても過言ではないでしょう。FileMakerの役割は「データベース」です。データベースは、ただ、データを入れただけでは、機能しません。
検索して、表示するレコードを絞る(対象レコード)ことで、その実力を発揮します。
この対象レコードを作成する手順を誤ると、思った通りのデータが表示されず、せっかく業務効率を目指して、FileMakerを使っているにもかかわらず、効果が得られないといったこともあり得ます。
フィールドのタイプによる検索結果の違い
もっとも簡単な検索方法は、下記のように手動で検索モードにして検索をする方法です。

この方法では、ユーザーの検索したいフィールドを指定して、条件を設定して検索を行うことができます。FileMakerをただのデータの入れ物として使っているときや、検索条件が多岐にわたる場合には便利ですが、実際の運用ではあまり使わないというものではあります。
FileMakerの検索は、そのフィールドタイプによって動作が変わることがあります。
特に変わるのは、数字とテキストのタイプです。
例えば、数字のフィールドにも、テキストのフィールドにも同じデータが入っていたとします。1~100までの数字のデータが入っていたとします。
この場合、「1」を入力して検索した場合、数字フィールドの場合は「1」だけが対象レコードになります。つまり対象レコードは1件です。
対して、テキストの場合は、「1」を含むレコードが検索される可能性があります。例えば「21」もそうですし。「51」も表示されます。
このように、入っているデータは同じで、条件が同じでも結果が変わることがあります。
よく使う演算子
また、条件とセットで使う「演算子」があります。これを使うことによってより幅広い検索を行うことができます。
| 演算子 | |
| = | 空白を検索(=)だけをフィールドに入力 |
| * | 何か入力されているフィールド(空白じゃないフィールド)のレコードを検索 |
| *文字 | 「文字」が含まれているレコードを検索 |
| ==文字 | 完全に一致するもののみを検索 例えば「==千葉」と検索すると、「東千葉」や「南千葉」は検索されない |
| … | 日付の範囲を選択 「2025/10/1…2025/10/15」 |
| ≤ ≥ | 以上、以下を検索 |
| // | 今日を検索(日付フィールド) |
実運用する業務アプリでは、手動検索モードは使わない
業務アプリを作っていく場合は、これらの基本を踏まえて、作成していくといいでしょう。
ですが、業務アプリを作る場合は、先ほどの手動で行う検索モードは使わないようにしましょう。
理由はいくつかありますが、最も重要なのが効率が悪いということです。検索は、データベースを扱う上で最も重要な機能ですから、何回も行うことになります。
そのたびに、検索モードを開いていては効率が悪いわけです。
基本的には、定型の検索をスクリプトに設定しておき、それをボタンに割り当てて使うというのが一番でしょう。

こちらがその例です。「帳票作成と一覧(すべて)」以外のすべてのボタンは、あらかじめよく使う検索条件をスクリプトで設定して、簡単に使えるようにしてあります。下記はスクリプトの例です。

エラー処理[オン]
また、スクリプトには、エラー処理[オン]は必ず入れておきましょう。これがないと、ユーザーに対象レコードがなかったことをダイアログで通知することになります。これによって、ユーザーはダイアログを閉じるためにクリックをしなければなりません。ここで、ひとつ効率が悪くなります。
クイック検索の活用
いろいろなフィールドに、いろいろな条件を入力する場合は、クイック検索を活用しましょう。

クイック検索は右上に表示されています。これを利用することで、簡単に検索モードを使うことなく検索することができます。ツールバーを隠してる場合は、表示されません。
こちらも、対象レコードがない場合には、エラーダイアログが出ますので、コレが煩わしい場合は、スクリプト化しておくのもいいでしょう。また、ツールバーを隠している場合にもスクリプト化は有効です。

このようにスクリプトに設定し、レイアウトのボタンに設定すればOKです。[test2024::text]には、クイック検索に使用する検索条件を入力するためのフィールドを設定します。このフィールドはグローバルフィールドにしておくことをおススメします。

グローバルフィールドは、フィールドの定義の画面で、「グローバル格納」にチェックを入れると適用できます。
クイック検索に含まれるフィールド
クイック検索はそのレイアウトに含まれているフィールドが使われます。ただし、下記のように設定したフィールドには適用されません。設定はインスペクタでできます。


