みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM11 Win7
部分一致での検索を試みているのですがどうしてもうまくいきません。
例)フィールドに「098765」の数字。
スクリプトボタン操作にて演算子を使わず
検索モードにし、「87」だけで検索する。上記数字が検索ができるようにしたいのですが
初心者にて試行錯誤しているのですが
いいトピックまたは方法を教えていただけないでしょうか。
説明がいまいちですが宜しくお願いします。
Offline
「098765」は数字ではなくテキストです。
あまり重要ではないかも知れませんが全角なのか半角なのかどちらでしょう?
演算子を使う場合は「*87*」で検索できますから
検索モードにして「*87*」で検索される様にすればいいと思いますが、
演算子を使わないでというのはスクリプト内でも演算子を使わずにということですか?
検索したい文字列というのは「87」に限定されるのか他の文字列にも変わるのですか?
Offline
Moz様、お返事ありがとうございます。
「098765」は全角 テキストフィルードです。
検索モードから上記フィールドに演算子を使用せず、部分(「6」「98」「876」)とかの数字のみで
検索したいだけなのですが・・・
すいません、説明がへたで<(_ _)>
スクリプトボタン設定が出来ればいいなと思っています。
Offline
演算子を使わずに部分一致は難しいのではと思います。
(他のエキスパートの方如何でしょう?)
検索実行する際に、メニューから検索モードへ切り替えさせるのでなく、
ボタンで検索モードに切り替えさせて検索実行で演算子が補完される様なスクリプトを作成してボタンにすればよいかと。
Offline
Moz様、ありがとうございます。
違う方法で頑張ってみます。
Offline
条件でPattrncountする計算フィールドを作って、そこで検索するとか?
Offline
旅人様、ご返答ありがとうございます。
私、初心者なものですから、よろしければよろしければ
条件でPattrncountする計算フィールドを作って、そこで検索するとか?
この上記方法をおしえて貰えませんか。
あつかましいのは重々感じています。よろしくお願いします
Offline
レコード数は多いのでしょうか。
それほど大量でなければ、
旅人さんの計算式をポータルフィルタの条件にすることも可能ですね。
また、
部分一致のリレーションを使う方法も有りますね。
検索値入力フィールドにトリガを掛ければ、
入力するだけでレコードが絞り込まれます。
「部分一致 リレーション」
でここを検索すると過去スレがでてくると思いますよ。
Offline
チポ様、いつもありがとうございます。
過去にもいろいろ助けてもらってます。
検索値入力フィールドにトリガとありますが、
トリガの内容をお教えねがいませんか。
よろしくお願いします。
Offline
一応、検索モードでは演算子使っていない例 \バキ
こういう意味ではないかも・・・
http://pupld.net/28/150423/2p5j06qqdi/index.cgi
部分一致検索
Offline
実際のシステムにそのまま使えるかはその他の業務次第ですが、
スクリプトトリガを利用して検索モードで検索条件を加工することで、
あたかもフックしているかのような動作は可能です。
数字ではなくランダムな英数字を使ったサンプルを以下にアップしています。
http://fast-uploader.com/file/6985337018199/
検索モードに切り替えて適当な英数字で検索すると、
フックの有無で返ってくる結果が変わります。
ただし、少し触れば色々と粗が見える程度のサンプルですし、
その粗隠しは、実際のシステムごとで必要性も方法も変わってきます。
-
以下のようなスクリプトを、検索対象フィールドのスクリプトトリガ設定にて、
OnObjectSaveイベントに割り当て、検索モードでのみ有効としています。
If[Get ( ウインドウモード ) = 1 and not IsEmpty(data::target)]
フィールド設定[data::target; "*" & data::target & "*"]
End If
こうすることで、検索モードを検索実行によって抜けるタイミングで、
検索条件に対するOnObjectSaveが発火し、
検索条件を * で挟んだ上で検索が実行されます。
検索モードに切り替え → 検索条件入力 → Enter という一連の操作に限定できるかぎり、
通常の検索となんら変わらないまま、演算子で制御できます。
しかし、例えばフィールド外のクリックでもイベントは起きてしまいますし、
暗黙の変換が入ることによる事故の可能性もあります。
皆さんのに乗っかっただけですが、
スクリプトトリガは発火するウインドウモードを指定できるので、
部分一致を行いたいフィールドのトリガを[検索]のみオンで下記スクリプトを指定
私は[OnObjectExit]に乗せました。
検索モード以外ではトリガは発火しません。
変数を設定 [$フィールド名; 値:GetFieldName ( Evaluate (Get ( アクティブフィールド名 ) ) )]
変数を設定 [$フィールド内容; 値:Get ( アクティブフィールド内容 )]
If [not IsEmpty ( $フィールド内容 )]
フィールドを名前で設定 [$フィールド名; "*" & $フィールド内容 & "*"]
End If
D.R.Y. に書いているのでコピペだけで使えるかと。
Last edited by Moz (2015-04-23 21:17:09)
Offline
honda様、Moz様、すごく感謝感謝感謝しかありません。
思った検索が出来ました。すげーーーーーー感動です。
これからも若輩ものですがご指導よろしくお願いします。
助かりました。<m(__)m>
Offline
解決してますが、ひとつ補足。
> スクリプトトリガは発火するウインドウモードを指定できるので、
> 部分一致を行いたいフィールドのトリガを[検索]のみオンで下記スクリプトを指定
Mozさんのこの部分ですが、私のサンプルでも、
トリガの動作対象は検索モードのみにしています。
スクリプト自体に Get ( ウインドウモード ) = 1 を入れているのは、
万が一誤ってブラウザモードで動作させてしまった際に、
業務データを汚染してしまわないためのものです。
FileMakerはデフォルトでスクリプト実行のショートカットが割り当てられたり、
何かと誤操作を誘発しやすい構造をしているので。
この点以外は、Mozさんのものの方が汎用的で流用しやすいと思います。
honda様、補足ありがとうございます。
わたくしの勉強不足な部分を含め、ご丁寧な指導ほんとにありがとうございます。
両方のサンプルにより思ったとおりの検索も出来すごく感動しております。
一時はあきらめかけたのですが、視野が広がり今はすごく満足していた次第です。
ほんとに心から感謝したいと思います。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 549.64 KiB (Peak: 570.55 KiB) ]