みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM19
MAC 11.1
調べてもよく分からないため、質問させてください。
取引先を検索するためにクイック検索を使用したいと考えています。
フィールドはリスト表示で取引先番号、取引先名、住所、作成タイムスタンプ、修正タイムスタンプのフィールドを置いてあります。
検索用のグローバルフィールドの中に検索キーを入れて、トリガを使いフィールドから離れた時にクイック検索の実行が動くようにしてあります。
存在しないデータを検索した時に、デフォルトで右上に存在するクイック検索の窓から検索をかけると「検索条件に一致するレコードがありません」と表示されます。
しかし、同じ検索条件でスクリプトの方を使って検索すると検索した時にアクティブなレコードが検索結果として表示されてしまいます。
スクリプトデバッガでエラーの確認を行いましたがなんのエラーも出ていませんでした。
なぜ検索結果が異なるのかまるでわかりません。
なにがいけないのでしょうか。よろしくお願いします。
エラーが出ない件は、再現できませんね。エラー処理オンとか、他のスクリプトステップがあるとか?スクリプトは1行だけですか?
検索結果は、何も見つからなければ今までのままのレコードが表示されるので、そういう仕様では。スクリプトでなくてもそうですよ。
検索対象のフィールドがばらばらなので、クイック検索を使う理由がなさそうですけど...同じ検索条件を複数のフィールドにわたって検索する場合に使うものだと思います。
間違えて「一致するレコードを検索」を使ってるなんてことはないだろうし...
himadanee様
スクリプト自体は
エラー処理オン
クイック検索の実行[検索用グローバルフィールド]
if[最終エラー=401]
全レコードを表示
フィールド非表示用のフラグ立て
else
フィールド表示用のフラグ立て
endif
フィールド設定[検索用グローバルフィールドを空にする]
です。
クイック検索を使用する理由としてはブラウズモードのまま使用できるのと、複数のフィールドをまたいで検索できるからです。
一致するレコードを検索も使用していないのですが、エラーが出ない理由が全くわかりません。
「エラー処理オン」にしているので、エラー時に何も表示しません。
デバッガは、1ステップずつ実行してエラー直後を見ないと、エラー番号は最後に実行したステップの結果(この場合「フィールド設定」)しか見えません。
himadanee様
デバッガでもエラーが出てこないのです。
なのでIFで401を引っ掛けるようにしてもエラーが出てないので通過されてしまいます。
他のシステムでは普通にエラーがでてくるので他に設定などがあるのでしょうか?
[エラー処理](オン/オフ)はエラー時に FileMaker 標準のエラーダイアログの表示(オン)・非表示(オフ)を制御します。
スクリプトが意図通りに動作することを確認してから利用するのが原則ですし、必要に応じてオン/オフをしなければエラーを見落とす原因となります。
(例:[検索実行]のエラーダイアログを非表示にしたいなら[検索実行]の前でオンにしてその後オフに戻します)
スクリプトの冒頭に[エラー処理(オン)]と教えている方もいらっしゃるようですが完全に悪手です。
[エラー処理]の状態に関わらずエラー番号は必ず取得できます。
himadaneeさんが書かれているようにスクリプトデバッガで1ステップずつエラー番号をチェックしなければどこでエラーになったか分かりません。
なお、デバッガではエラーが出るというのはスクリプトデバッガならエラーダイアログが表示されるという意味ではないので、
[エラー処理(オン)]があるならばデバッガでもエラーダイアログは表示されません。
[クイック検索の実行]で合致するレコードがなければエラー番号は401が返ります。
スクリプトの最後のステップが[クイック検索の実行]ならば、
デバッガでは拾いづらいので[スクリプトの一時停止]などを入れると確認できます。
Last edited by Moz (2021-05-07 16:29:03)
Offline
エラー処理オン
クイック検索の実行[検索用グローバルフィールド]
if[最終エラー=401]
全レコードを表示
フィールド非表示用のフラグ立て
else
フィールド表示用のフラグ立て
endif
フィールド設定[検索用グローバルフィールドを空にする]
この記載だとよくわからないので、スクリプトをきっちり載せてみては。
データベースデザインレポート を出力すれば、テキスト化したスクリプトをコピーできます。
Offline
Moz様
エラー処理をオフにしてもエラーダイアログが表示されません。
スクリプトデバッガで1行ずつ実行してもエラーが表示されません。
検索結果としては検索する時アクティブなレコードだけが表示されます。
存在するデータを検索キーにするとその時アクティブなレコードと検索キーを含めたレコードが表示されます。
意図しない検索が行われているということになるのでしょうか?
クイック検索の実行の使い方としては計算式の指定に検索キーが入力されているフィールドを指定すると理解しているのですがそれが間違っているのでしょうか?
qb_dp様
データベースデザインレポートという、ものを初めて知ったのですがこれでよろしいでしょうか?
#####################################
#スクリプト仕様 :得意先のクイック検索
#作成日 :2021/04/28
#更新日 :
#####################################
エラー処理 [ オフ ]
クイック検索の実行 [ M得意先::g_検索 ]
#検索結果が0なら全レコードを表示してフィールドなどを非表示にする
If [ Get ( 最終エラー ) = 401 ]
全レコードを表示
変数を設定 [ $$得意先検索; 値:1 ]
Else
変数を設定 [ $$得意先検索; 値:"" ]
End If
フィールド設定 [ M得意先::g_検索; "" ]
このスクリプトを別のシステムに入れて実行するときちんとエラーが表示されます。
ピンポイントにクイック検索の無効といった項目があるのでしょうか?
レイアウト設定でもクイック検索を有効にするにチェックが入っているのですがなにがいけないのでしょうか……
書かれているとおりのスクリプトならば、
[クイック検索の実行]の直後に該当するレコードがなければエラーダイアログが表示されます。
該当レコードがなければスクリプトデバッガの下部[コールスタック]の上のエリアに「[401]」が表示されますし
グローバル格納のフィールドが空ならば[400]が表示されます。それぞれダイアログの内容は異なります。
まずどのようにデバッグを行っていますか?
それでもエラーダイアログもエラーも出ないなら、次の手順をおすすめします。
・他のマシンで同じファイルで試す
これで解決したらマシン固有の問題です。
・Claris FileMaker Pro を再起動する
・mac を再起動する
ここで解決するなら一時的に調子が悪い
・同じようなファイルを1から作成して再現するか試す
ここで解決するならファイルが悪い
・Claris FileMaker Pro を再インストールする
・macOS を再(ry
Offline
このスクリプトを別のシステムに入れて実行するときちんとエラーが表示されます。
ファイル依存じゃないですか......
クイック検索はレイアウト毎に無効にできますが、
同じレイアウトでクイック検索窓が使えているならスクリプトでも実行できます。
Offline
このスクリプトを別のシステムに入れて実行するときちんとエラーが表示されます。
ファイル依存じゃないですか......
クイック検索はレイアウト毎に無効にできますが、
同じレイアウトでクイック検索窓が使えているならスクリプトでも実行できます。
Moz様
MACとFileMakerの再起動、別MACでのテストを行いましたが結果は変わりませんでした。
ファイル依存ということはなにかしらこのファイルに異常があるということでしょうか?
修正などはできるのでしょうか?
同ファイルでこれと同じスクリプトが仕入先検索、注文書検索、工番検索と3つあるのですが、注文書と工番は思い通りの検索ができます。
ファイルを作り直した方が早いのでしょうか?
レイアウト上のフィールド単位でも「クイック検索」のON/OFFができます。
確認してみては。
Offline
レイアウト上のフィールド単位でも「クイック検索」のON/OFFができます。
確認してみては。
qb_dp様
検索できないレイアウトのフィールドを確認してみましたが「クイック検索にフィールドを含める」にチェックが入っていました。
レイアウトは縦横を固定するために全て複製して作ったのですがその複製がいけなかったのでしょうか?
具体的にはデバッガで実行したときにどうなるのですか?
何ごともなくスクリプトステップが実行されて IF に進むのですか?
Offline
「このスクリプトを別のシステムに入れて実行するときちんとエラーが表示されます」
フィールド名が入っているので、そのまま「別のシステム」は不可能です。つまり、使用するグローバルフィールド名を間違えてる可能性がある?
あと、401以外のエラーを処理してないのも問題かも。
存在しないフィールドやフィールド指定違いで条件が空でも、
[エラー処理(オフ)]ならそれぞれに応じたエラーダイアログがでるんですよね......。
何も起きないというのが具体的には何を指しているのかな、と。
Offline
Moz様
>具体的にはデバッガで実行したときにどうなるのですか?
>何ごともなくスクリプトステップが実行されて IF に進むのですか?
デバッガで実行するとクイック検索を実行の後、IFと通り過ぎてフィールド設定へ行きます。
>何も起きないというのが具体的には何を指しているのか
エラーが出ずに検索時アクティブだったレコードが1件だけ絞り込まれた状態で表示されます。
himadanee様
>フィールド名が入っているので、そのまま「別のシステム」は不可能です。
フィールド名などを別システムのものに対応させて実行してみました。
すみません、説明不足でした。
グローバルフィールドも先に書いたスクリプトそのままでレイアウト上に存在しているフィールドと同じことを確認しています。
レイアウトもスクリプトも同じような内容なので全て複製して必要な部分のみ変更したのですが作り方がまずかったのでしょうか?
[クイック検索を実行]のスクリプトステップが実行されてデバッガの右下にエラーが表示されず
画面上にはレコードが1件表示されているならば、「条件に合致したレコードが検索された」と考えるのが妥当です。
試しに全レコードを表示した状態または
全レコードを表示してから[レコード]-[対象外のみを表示]して1件も表示されていない状態で実行するとどうなりますか?
それでも1件が表示されるなら「条件に合致したレコードが検索された」でしょう。
(後述する可能性が当たっていればレコードが0件の際にはフィールドに入力ができなくなりますが)
考えられる可能性として「グローバルフィールドに設定したと(思っている)フィールドがグローバルフィールドではない」があります。
例えば1件表示されている状態でヘッダに配置した通常のフィールドに入力すると、そのレコードのフィールド値になります。
そのままクイック検索を実行すると実行した際のフィールドの値で検索しますから必ず合致します。
Last edited by Moz (2021-05-07 19:14:58)
Offline
Moz様
フィールドの設定を見返したところ、グローバルフィールドと思っていた検索用のフィールドがグローバルフィールドになっていませんでした。
グローバルフィールドに変更したところ、他のクイック検索スクリプトと同じ挙動になりました。
みなさま長らくお付き合いいただきありがとうございます。
Pages: 1
[ Generated in 0.013 seconds, 9 queries executed - Memory usage: 574.41 KiB (Peak: 610.95 KiB) ]