みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
複数条件で検索するため、
・検索条件となるいくつかのフィールドの値をグローバル変数格納し、「検索モードに切り替え」で「条件」を各変数を設定し抽出します。
この時、検索条件となるフィールドが空欄の場合、その条件はなし、つまり全てのレコードがヒットするようにしたいのですが実際は$$xxxxとなってしまい一件も引っかからなくなります。
ifで値が空欄の場合はその条件を加えない、という方法ならできると思いますが何かスマートじゃないかんじがします。
このような場合どうするのが定石でしょうか。
Offline
変数を「*」ワイルドカードに条件換値すれば、
(空欄以外の)全てのレコードがヒットできますが、
空欄除外では拙い事案ですか?
Last edited by Hiro (2017-08-16 14:39:03)
Offline
スクリプト:検索実行 [記憶する] で、変数を使った場合、変数がNULLの場合、変数名がセットされると言うバグがあります。16では、修正されているようです。
上記のバグは別にして、変数がNULLの場合、「全レコードを表示」にしろ「*」アスタリスクで検索にしろ、条件式は、必要でしょう。
Offline
Hiro様
検索対象のレコードのフィールドが空欄の可能性もありますので空欄が除外だと今回のケースにはちょっとそぐわないかもしれません。
qb_dp様
まさにその通りの症状です。バグだったのですね。そのような情報はどこでキャッチアップできるのでしょうか。
検索キーとなるフィールドが多くなることを考えると、「検索モードに切り替え」で複数条件をifあるいはcaseでやるよりも、「対象レコードを絞り込み」で1フィールドずつ順にやっていくほうが冗長ではなくなるのでしょうか。
Offline
それだと検索条件そのものも動的に変化させる必要が出てくるので、
・検索条件を計算式で定義できるExecuteSQL関数を使い、
・検索結果にレコードIDの一覧リストを得て、
・このID一覧リストをマルチキーにOR照合リレーションを確立し、
・それの「関連レコードに移動」で実体レコードを抽出する、
とか。
Offline
バグというか「仕様」じゃないですか。
変数を設定するときに空白を付ければ良さそうですが。
Offline
変数を設定 [$val; 値;""]
検索実行 [記憶する] (検索条件に $val を設定)
上記のようにすると検索値に $val (変数名) が入るんですよね~。
検索実行 [記憶する] 以外の場合、「フィールド設定」 や 「カスタムダイアログを表示」 のでは、空白の変数の場合、値は、空白です。
FileMakerのナレッジに載っていたような気がしたのですが...。
Offline
そうでなくて
変数を設定 [$val; 値;フィールド & " "]
という意味です。NULLでなくSPACE
””を設定すると変数が削除されます。
全部のフィールドが空だと検索条件がないエラーになりますけど
Offline
書き方が悪かったですが、検索キーは最初にいくつか設定するもので、運用中に検索フィールドが増えていくという意味ではありませんでした。今回は3つくらいなのですが、他で同様の物を作ったときに、キーが多くなったら条件分けがややこしくなっていくなと。
冗長化を防ぐにはSQLなんですね。SQLの知識は全くありませんので今後勉強します。
空白をつける方法、なるほど望み通りの挙動です。
ただ、仕様として検索条件におけるスペースの扱いが気になってしまいます。無視される、ということでしょうか。
Last edited by yup (2017-08-17 01:22:56)
Offline
解決しているようですが、、
> 「検索モードに切り替え」で複数条件をifあるいはcaseでやるよりも
値のない変数でフィールドに入力しても何ら問題ないでしょう。
そのフィールドは検索条件にはなら来ですよ。
条件分岐の必要はないですね。
Offline
以下に記載がありました。バグでは、無く仕様のようです。
「不明な変数を検索条件の中で使用すると、その変数は展開されません。」
スクリプトによる検索条件における変数の使用 | FileMaker : http://filemaker-jp.custhelp.com/app/an … F%E7%94%A8
$変数がNULLだと、「不明な変数」扱いになって展開されないと言う扱いなんですね。
$変数がNULLの場合:
以下の場合は、検索値として変数名が設定される
#レコードの検索 TEST::F1: [$val1] AND TEST::F2: [$val2]
検索実行 [記憶する]
以下の場合は、検索値は、空(NULL)
検索モードに切り替え []
フィールド設定 [TEST::F1; $val1]
フィールド設定 [TEST::F2; $val2]
検索実行 []
Offline
スクリプト:検索実行 [記憶する] の場合は、変数の挙動がうっとうしいので、
検索値が全て空(NULL)の場合は、全レコードを表示 とするなら、以下のような感じがスッキリすると思います。
If [IsEmpty ( $val1 & $val2 & $val3 )]
全レコードを表示
Else
検索モードに切り替え []
フィールド設定 [TEST::F1; $val1]
フィールド設定 [TEST::F2; $val2]
フィールド設定 [TEST::F3; $val3]
エラー処理 [オン]
検索実行 []
エラー処理 [オフ]
End If
Offline
マージフィールドも同様だと思ってたら、そっちは展開されますね... 繰り返しがサポートされてないのは同じだったのに。
ちなみに変数(値)がNULLなのではなく、""を代入すると変数自体が削除されます。
フィールド設定 [TEST::F1; $val1]
の場合は、「計算エンジンを使用」するので存在しない変数の値は空。
Offline
いろいろなやり方、仕様も整理でき、目的の挙動も得られました。ありがとうございます。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 534.53 KiB (Peak: 555.44 KiB) ]