みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
oniasです。 Win10 FM15 iPhon6s
スクリプトで検索結果なしの場合にカスタムダイアログを
出そうと考えていますが、ダイアログでないのです。
どこがおかしいのでしょうか?
スクリプトを1行づつ、一時停止を加えながらデバッグの様に
確認していきましたが、どうしてもエラー出すところで
レコードは表示しないのですが、ダイアログが動く気配が
ありません。
ご指導、宜しくお願い致します。
※以下は同テーブル**********************
①検索入力用の「フィールドAA」⇒「札幌」
②フィールドAAワイルドカード関数で変換「フィールドBB」⇒「*札幌*」
Middle(①; 0 ;0) & "*" & Middle(①; 1 ; 15 ) & "*"
③レコード内の「漢字のみ」検索対象「フィールドA」
④レコード内の「かなのみ」検索対象「フィールドB」
※以下スクリプト***********************
エラー処理[オン]
If [If(①="";1;0)
フィールドへ移動[]
Else
コピー[選択;②]
検索モードに切り替え[一時停止:オフ]
フィールドへ移動[選択/実行(L);③]
貼付け[選択;③]
検索実行
If[If ( Get(最終エラー) = 401 ;1;0)]
コピー[選択;②]
検索モードに切り替え[一時停止:オフ]
フィールドへ移動[選択/実行(L);④]
貼付け[選択;④]
検索実行
ElseIf[If ( Get(最終エラー) = 401 ;1;0)]
カスタムダイアログを表示「”案内”;”該当データなし”」
全レコードを表示
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
Else
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
End If
End If
End If
Offline
oniasです。
追信です
途中にエラー処理を「オフ」追加しましたが、うまくいきません。
宜しくお願い致します。
If[If ( Get(最終エラー) = 401 ;1;0)]
コピー[選択;②]
検索モードに切り替え[一時停止:オフ]
フィールドへ移動[選択/実行(L);④]
貼付け[選択;④]
エラー処理[オフ]----------▶ここに「オフ」で入れてみると、エラーメッセ出ますが、カスタムダイアログは無視されますね
検索実行
ElseIf[If ( Get(最終エラー) = 401 ;1;0)]
カスタムダイアログを表示「”案内”;”該当データなし”」
全レコードを表示
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
Offline
コピー[選択;②]
で何をしたいのかがわかりませんけど、検索結果がないのだからコピーはできません。
401以外のエラーを処理してみれば原因がわかるでしょう。
Ifステップの中は論理値が必要なので、
If[If(①="";1;0)]
は冗長というか無意味に難解になってます。
If[①=""]
ElseIf[If ( Get(最終エラー) = 401 ;1;0)]
の最終エラーは,その直前のステップ If[If ( Get(最終エラー) = 401 ;1;0)] のエラーを得ますので,常に0が返ってくるはずです。
最初の if の直後で処理するべきでは。
Offline
なんか余計なものがたくさんある感じですね。
③と④は何のためにあるのですか。
②は"*"&①&"*"ではだめなのですか。
①をグローバルフィールドとか変数にすると②もコピー/貼り付けもいらないはず。
Offline
みなさんお書きになってますが
とにかく If の条件式が全くか間違ってます
原因は、全てそこにある と思いますが、
私のいつものやり方は
・フィールドへ移動
:貼り付け
という2ステップを
・フィールド設定 で済ませてます
フィールド設定と
その他の入力用ステップの違いを
一度ヘルプのスクリプトリファレンスで確認するとお分かりいただけるかも。
ひょっとしたら
レイアウト上にターゲットフィールドがなかったなんてことだと
お書きのスクリプトは何もしないので
と行って、検索をするのだからフィールドはないと困りますが・・
Offline
よく見たら、2重の検索なんですね。15行以降は
検索実行
If[If ( Get(最終エラー) = 401 ;1;0)]
カスタムダイアログを表示「”案内”;”該当データなし”」
全レコードを表示
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
endIf
Else
とするべきでしょう。
ただ、11行目の実行時点で、元のレコードがアクティブになっていないでしょうから、そのコピーでは正しく無いかも。
Last edited by Shin (2017-01-21 11:11:00)
Offline
最初の
> If[If ( Get(最終エラー) = 401 ;1;0)]
これは、
If[If ( Get(最終エラー) = 401 ;0;1)]
の書き間違いでは。
これは
If [ not Get ( 最終エラー ) ]
こう書いてもいいでしょう。
エラー処理[オン]
を検索実行の直前に入れてみたらいかがでしょう。
Offline
漢字で検索して、見つからなければ読みで検索し、という事でしょうから、流れは正しい様ですよ。(問題はほかにもありますが)
その2回目の検索のエラー処理の書き方が間違っている、という事の様です。
具体的にどのようなデータかにもよりますが、1回の検索で何とかなるかもしれませんね。
Last edited by Shin (2017-01-21 12:29:36)
Offline
札幌は「かな」フィールドには無いでしょうし分かりにくい・・・
条件入力されたフィールドが漢字でもかなの場合でも、両フィールドでOR検索したらいいのかも?
Offline
> 漢字で検索して、見つからなければ読みで検索し
そういうつもりなのか、、
とすれば、
私の#8のレスは間違っていますね。
その部分はoniasさんの書かれた通りでいいです。
間違いは、
Else If
ですよ。
そこは、Ifとしないからカスタムダイアログがでないのです。
ロジック的にも、Elseではないでしょう。
としても、
既に指摘がある通り、
ひらがな検索の方法がまったくダメですね。
Offline
oniasです。
皆さん
レス有難う御座います。
お陰様で、ご指導頂いた事を繰り替えし試してみたところ
完成度や構成は、分かりませんが、目的は果たせる様になりました。
最初に私が挙げた時に記載してなかった件数をカウントするフィールドを
(無駄な事かとは思いながら)レコード事に計算=1で作り、レコード集計
フィールドを1個作成してあります。そこが問題と思いました。
集計フィールドを⑥としておきます。
Shin様
>よく見たら、2重の検索なんですね #7
重複検索は、うまくいかず、容量や速度を妥協して
「③漢字のみ」「④かなのみ」を連結し「⑤漢字かな」としました。
>最初の if の直後で処理するべきでは。#4
よくわからず、使ってました、恥ずかしいですね。
>その2回目の検索のエラー処理の書き方が間違っている #9
実は、ここが適切でないことがわかりました。というより
足りなかったと思います。
※完成したスクリプト***********************
エラー処理[オン]
If [If(①="";1;0)
フィールドへ移動[]
Else
コピー[選択;②]
検索モードに切り替え[一時停止:オフ]
フィールドへ移動[選択/実行(L);⑤]
貼付け[選択;⑤]
検索実行
If[If ( Get(最終エラー) = 401 ;1;0)]
カスタムダイアログを表示「”案内”;”該当データなし”」
全レコードを表示
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
Else
フィールドへ移動[⑥] ※ここを指定してなかったために、カスタムダイアログが出ませんでした。
If[If ( ⑥= ”” ;1;0)]
レイアウト切り替え「※ここで今回は、変更して新規で作成したレイアウトへ移動させました」
フィールドへ移動[]
Else
レコード/検索条件/ページへ移動[最初の]
フィールドへ移動[]
End If
End If
End If
また、時間のある時に、容量や速度向上のため
連結は止めて、別々のフィールドにして完成スクリプト自体を
多重化し連結で試してみたいと思います。
今回は、検索結果出るまで10秒以上かかりました。
もともとは1.5秒以内で結果が出てましたので。
Offline
本題とは関係しませんが、
If文の記述で、Ifがダブっていて非常に冗長なのが気になりまして、...
矢印の右と左は等価です。
・If [If(①="";1;0)] → If [①=""] または If [IsEmpty(①)]
・If [If(Get(最終エラー) = 401 ;1;0)] → If [Get(最終エラー)=401]
・If [If(⑥= ”” ;1;0)] → If [⑥=""] または If [IsEmpty(⑥)]
Offline
If [If・・・]は早く止めた方がいいです。面倒なだけ。
コピー後貼り付け時の「フィールドへ移動」も不要。
検索後の最初のレコードに移動とフィールド移動も不要のはず。
> フィールドへ移動[⑥] ※ここを指定してなかったために、カスタムダイアログが出ませんでした。
そんな事はないはず。
Offline
元レコードが膨大な数でないのでしたら、検索が遅いのは、その計算フィールドに索引が作られていないからでしょう。オプションで索引を作成するようにしてみると良いかもしれません。
また、必ずしも2重の検索にする必要は無いかも知れません。
漢字で "札幌" を検索、または、漢字が空白でよみが "さっぽろ" を探す、ということでしたら、その条件を作れば良いですし、漢字で "札幌" 、または、よみが "さっぽろ" 、ということでしたらもっと簡単です。
Offline
oniasです。
引き続き、ご指導有難う御座います。
Hiro様、旅人様
>If文の記述で、Ifがダブっていて
>If [If・・・]は早く止めた方がいいです
FM15の画面キャッチコピー通り記述していました。
Ifは、重複になっていないので、分かりづらくて申し訳ありません。
hiro様
> If [①=""]
やってみましたが、どうしてもスクリプト閉じるときに「関数中の引数が足りません」と
最終尾の”)”がアンダーの色付きでメッセージが出てしまいます。
Ifはもちろん重複させていのです。私にはわかりません。
>フィールドへ移動[⑥] ※ここを指定してなかったために
指定しないでやってみると、ダイアログが出ないのです。なぜかわかりません。
集計フィールドは、何もしなくてもグローバルフィールドの様に機能すると思い
最初は、指定していませんでした。グローバル自体の設定があるのかないのかわかりません。
試しに、他は、何処も修正せず、集計フィールドを指定したら1発でダイアログが出たので
私も納得はしていないのですが・・・ ご指導ください。
Shin様
>検索が遅いのは、その計算フィールドに索引が作られていないからでしょう
現在のテーブルで、索引が設定できないもの以外は、全て索引設定になっているのです。
ファイルが、大きくなるので、最初は、検索に該当しないフィールドは、設定していませんでした。
>オプションで索引を作成するようにしてみると良いかもしれません
オプションで索引できるものは、全て設定しています。
>漢字で "札幌" を検索、または、漢字が空白でよみが "さっぽろ" を探す、ということでしたら、その条件を作れば良い
最初は、「漢字」でも「かな」フィールドを順番に検索し抽出していました。しかし、どうしてもスクリプトが今回の
相談までうまくいきませんでした。本当は、Shin様のご提案では、簡単との事ですので、再挑戦しようと考えています。
いつも親切に有難うございます。
Offline
If スクリプトステップの構文は、
● If [<論理値計算式>] (※ <論理値計算式> は、論理評価する計算式を指定します。)
【使用例】
・If [A=B]
・ <AとBが等しい[真]の時の処理>
・Else
・ <それ以外(AとBが等しくない[偽])の時の処理>
・End If
Offline
検索条件にワイルドカードを使うと、検索時間は長くなります。
手動で良いので、"札幌" での検索と、 "*札幌*" の検索結果の比較をしてみましょう。同じならば、ワイルドカードを付ける必要がないかも。
Offline
hiro様
丁寧なご指導、大変有難うございます。
見よう見まねで使っていました。お恥ずかしい。
意味合いは、よく理解できました。
Shin様
そうなんですね、本当はワイルドカード無しで使いたいのです。
でも、どうしても未だ別テーブルとリンクしているフィールドを
連結する必要があり、その部分も検索対象となるため、完全一致できない
為にワイルドカードを使わざるを得ないのです。
もうひと踏ん張りしていろいろ試したいと思います。
Offline
> If [①=""]
やってみましたが、どうしてもスクリプト閉じるときに「関数中の引数が足りません」と
最終尾の”)”がアンダーの色付きでメッセージが出てしまいます。
①はフィールド名には使えませんので、この式も無理です。")"も存在しませんので何のことやら?
> 別テーブルとリンクしているフィールドを連結する必要があり、
この結果は,索引の作成は不可能ですよ。これの検索は,索引をその都度作りますので,遅いです。
また、他のフィールドを連結していても,ワイルドカードは必要ないのでは。一度,手動で "札幌" で検索してみれば。
Last edited by Shin (2017-01-23 13:50:55)
Offline
oniasです。
Shin様
最後まで、ご指導いただき有難うございます。
やっと、克服して、期待通りのデータベース完成しました。
検索スピードも1秒で10万件のデータをiPhonで表示可能となりました。
結局、連結はしましたが、別ファイルで連結し、CSVで掃き出し、ストレートな
テキストに漢字もかなもまえて一本化したものを元ファイルにインポートしました、
完成しました。助かりました。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 583.68 KiB (Peak: 620.59 KiB) ]