複数のフィールドを検索する

Windows

ひとつの検索フィールドに入力された値を元に複数のフィールドを検索して、該当するレコードを列挙したくなりました。

Webの情報を参考に作ってみましたが、素人なので不明な語句が多く、文章から判断するのは苦労しました。(/_;)
正しい方法かどうか分かりませんが、とりあえず出来ているので良しとします。

全てのフィールドをマクロに記述すれば、全フィールドに対して検索することができますが、その場合は別のスマートな方法がある気がします。

【追記 2011.06.28】
使用したFileMakerの標準が前方一致なので、全ての部分一致で検索したい場合は、検索項目に「*検索語」のようにアスタリスクを検索語の前に付ける必要がある。
又は、スクリプトで強制的にアスタリスクを付けるようにする。
私の場合は検索漏れがあると困るので「*検索語*」と、前後にアスタリスクを付けて検索している。

環境

  • Windows XP Professional SP3
  • FileMaker Pro 8.5v2

サンプル

手順

0. 新規データベースを作ってデータを入力する
1. 検索用レイアウトを作る

「レイアウト」→「新規レイアウト/レポート」。
後から配置するので、レイアウトに配置するフィールドは何も指定しなくて良い。


2. 検索用フィールドをグローバルで1個作成して検索用レイアウトに配置する
「ファイル」→「定義」→「データベース」。

3. 検索実行ボタンを検索用レイアウトに1個配置する
4. 検索用のマクロを作成する
4つのフィールドを同時に検索する場合は以下の通り。
検索するフィールドを増やす場合は、「新規レコード/検索条件」と「フィールド設定」を繰り返します。


4-1. 「フィールド設定」について

  • 「ターゲットフィールドの指定」に検索対象のフィールドを指定する。
  • 「計算結果」に検索用フィールド(グローバル)を指定する。


5. 検索実行ボタンに作成したマクロを割り当てる

マクロの内容

検索結果がゼロの場合、検索モードの状態で美しくないので、元のレイアウトに戻るようにしています。

エラー処理[オン]
レイアウト切り替え[「data」]
検索モードに切り替え[]
フィールド指定[table::name; table::search]
新規レコード/検索条件
フィールド指定[table::sub name; table::search]
新規レコード/検索条件
フィールド指定[table::address; table::search]
新規レコード/検索条件
フィールド指定[table::status; table::search]
検索実行[]
if [Get ( 最終エラー ) = 401]
レイアウト切り替え[「search」]
End If
エラー処理[オフ]

Comments