みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
>皆様
ありがとうございます。検索用のフィールドに値を格納しておくと検索の処理スピードも良い感じがしています。参考にさせてもらいます。
>himadaneeさん
もう少し詳しく書くと、名簿レコードのふりがなフィールドをかな行で抽出したいと思っています。濁音・半濁音は同じグループのかなに抽出できるようにしたいです。
過去にスレを立てて、演算子をつかった濁音半濁音込みでふりがなをかな行で抽出する方法を試みたのですが、なかなかできずじまいでした。
再チャレンジということで、とりあえずカスタム関数で以下のような計算式を作り、「ふりがな」フィールドの値から、結果値を格納しています。
Let
(
[
A = "あいうえおぁぃぅぇぉゔ" ;
B = "かきくけこがぎぐげご" ;
C = "さしすせそざじずぜぞ" ;
D = "たちつてとだぢづでど" ;
E = "なにぬねの" ;
F = "はひふへほばびぶべぼぱぴぷぺぽ" ;
G = "まみむめも" ;
H = "やゆよゃゅょ" ;
I = "らりるれろ" ;
J = "わをん" ;
W = Left ( ふりがな ; 1 )
] ;
Case
(
PatternCount ( A ; W ) = 1 ; A ;
PatternCount ( B ; W ) = 1 ; B ;
PatternCount ( C ; W ) = 1 ; C ;
PatternCount ( D ; W ) = 1 ; D ;
PatternCount ( E ; W ) = 1 ; E ;
PatternCount ( F ; W ) = 1 ; F ;
PatternCount ( G ; W ) = 1 ; G ;
PatternCount ( H ; W ) = 1 ; H ;
PatternCount ( I ; W ) = 1 ; I ;
PatternCount ( J ; W ) = 1 ; J ;
)
)
グローバルフィールドに抽出希望のかな行を洗濯した時に、スクリプトトリガ等で同じカスタム関数で変数値を割り出し検索しています。
もう少しシンプルでスマートな方法はないでしょうか?
FM19を使用しています。
ひらがな専用フィールドAの内容が「は」である場合、「ひ」「ふ」「へ」「ほ」等の同じかな行の値を結果としてだす計算方法はありますか?
>himadaneeさん、Shinさん
ありがとうございます。GetLayoutObjectAttributeの関数は今まで未使用だったので、やってみてびっくりです。勉強になります。
FM19をサーバーでホスト、PC・タブレットをクライアントとして運用しています。
ボタンバーAの各セグメントBをポップオーバーに指定、ボタンのテキスト内容を計算式にし、セグメントBのポップオーバーが表示されたら、テキスト内容が変更するようにしたいのですが、計算式等でそのような仕様は可能でしょうか。
ご教示いただきたく掲載しました。
よろしくお願いいたします。
>shinさん
いつもアドバイスありがとうございます。とりあえず、ファイルを起動してfmreauthenticateの時間内と時間外での確認をしたいと思います。
>Mozさん
再認証はどこまでのことを再認証するか、私の知識不足で、この板を通じて拡張アクセスの知識も深められればと思います。
アクセス回数をG変数で登録する方法に手を加えて問題の対処はできそうです。いろいろとあどばいすありがとうございます。
fmGo19を利用しています。
1:レイアウトAを表示した時に、レイアウトテーブルBのレコードを、グローバル値を参照にスクリプトCで自動抽出しています。
2:レイアウトAのアクセス回数をグローバル変数に登録し、次回にレイアウトAにアクセした場合は、スクリプトCの抽出はしないようにしています(再抽出表示のスピードを上げるため)
3:iPadをしばらく使わないと、レイアウトAにアクセスした時、全レコードが表示されてしまいます。
3の現象が起こるのは、事前に抽出された対象レコードの情報がリセットされてしまったという認識でよろしいでしょうか?
また、対象レコードのリセットとfmreauthenticateの拡張アクセスは関係していますか?
2:レイアウトAのアクセス回数が2以上の場合、スクリプトC内の検索ステップをスキップするようにif関数で制御していますが、3のように対象レコード情報がリセットされた場合、スクリプトCの検索ステップを行うようなスクリプトのアイディアをいただけないでしょうか。
宜しくお願いします。
19azshi75
Mac OS10.15 fmp19で使用
繰り返しフィールドA(5繰り返し)のそれぞれの数値を、繰り返しフィールドB(5繰り返し)で引いた数値を繰り返しフィールドC(5繰り返し)に表示できるようにしたいのですが、
繰り返しフィールドCの計算式はシンプルに行う場合、どのようにするのがベストでしょうか。
caseとget(繰り返し位置)関数は必須でしょうか?
御指導よろしくお願いします。
>shin様
いつもご教示ありがとうございます。
個別とは、ループを使うという認識でよろしいでしょうか?
確かにループの方がログ記録などのステップも入れられるし、メール送信も確実ということでしょうか。
メール送信の案件とは少し外れますが、ループステップで対象レコード総数とループ中の回数をそれぞれ変数で記録して、エンドユーザーに進行状況を可視化する方法はないでしょうか?
使用環境、fmp19 on mac, fms19, fm go 19 on iOS ファイルメーカーサーバーとクライアントはインターネット接続で使用。
テーブルA の対象レコードのメールアドレスに、同レコードのフィールド情報を使ってメール文を作成(カスタム関数)し、メール送信をするスクリプトを作成しています。
作成当時は、メール送信ステップの設定を詳しくわからなかったため、ループステップを使って、一つずつメール作成・送信していましたが、最近「複数の電子メールを送信」機能をなんとなく理解したので、スクリプトステップを簡略化かつスピードアップ化を目指しています。
メール作成の設定:
送信方法はSMTPサーバーを利用、メールアドレスはフィールド値、件名はステップ内の引数や変数を使用、メール本文は、テーブルAや関連テーブルのフィールド値を利用したカスタム関数(大体15ほどの引数を利用)を使用。
メール送信ステップの最終結果がわかるためにダイアログで表示してます。
課題、
現在複数の電子メールを送信を利用していますが、40件ほどのメールを送信するのにも20秒近くかかっていて、これをどうにかスピードアップ化できないか悩んでいます。
正直、複数の電子メール送信とループはどちらが速いのでしょうか?
データのやり取りのロスを軽減するため、サーバーにメール送信ステップを委託する方法も考えましたが、サーバーからのステップ終了結果取得のため、終わるまで待機をにすると、サーバーでも結構時間がかかります。
何か良いアドバイスがあれば、ご教授いただけないでしょうか?
よろしくお願いします。
いつも、的確なご指導ありがとうございます。
マニュアル等を読んでも、いまいち利用の仕方がわからなかった、スクリプトを終了ステップの結果の利用方法の納得がいきました。
スクリプトの組み合わせ方を考慮して、どの方法が利用しやすいか、検討していきたいと思います。
スクリプトステップAの中途でスクリプトBを実行します。
スクリプトステップA内からの情報は、引数を使ってスクリプトステップBに引き継ぐことはできますが、
スクリプトステップB実行後の結果をスクリプトステップAに戻った時に、引き継ぐ方法はありますか?
今のところ思いつくのは、グローバル変数等を使う案はあるのですが、例えばスクリプトステップBをサーバーで行う場合は、グローバル値は引き継がれるのでしょうか?
どなたかご教授お願いします。
>Mozさん
いつもありがとうございます。
固定ができれば、強制的に向きを指定できるし、レイアウトの作成も横長を想定して作れるのでいいなとは思っていたのですが・・・
ご指導通り、トリガとカスタムダイアログで、向きを促すようにトライしてみます。
iPad iOSで特定のレイアウトに移動した際に、横向きして向きを固定するステップをどなたか教えていただけないでしょうか
先日fmサーバを19にアップロードして、現在テスト運用しています。
サーバのバックアップスケジュール設定の関係で、アップロードする際にデフォルトのアップロードフォルダ内にサブフォルダを作成し、そこにファイルを仕分けています。
そのサブフォルダを管理・編集するやり方はアドミンコンソール等でできないのでしょうか?
>チポさん
抽出ということで、検索しか頭に思い当たりませんでした。
頭を柔らかくしないとダメですね。
ありがとうございます!
Mac OS14 FMP18で使用
検索条件に関する質問です。
テーブルAのレコードの中から、リレーションで紐づいているテーブルBの関連レコードが存在しないテーブルAのレコードを抽出する場合は、どのようなステップ?条件で検索かけられるでしょうか。
executeSQLでテーブルAのフィールド1の値を抽出する方法でも大丈夫です。
(SQLで関連フィールドを条件として作成できるのであれば)
よろしくお願いします。
追記:
iOSのtableBのレコードから任意のレコードだけexecuteSQLでレコードIDを取り出し、その情報をサーバーのtableCにアップロードしたいと思っています。
「変数を設定」:executeSQLで抽出したTableBのレコードID(リスト化)
「ループ+ レコードを作成」を使用:変数の1行目だけを取り出し、tableCのフィールド1に登録
「フィールド設定」tableCの他複数フィールドに関連テーブルや計算式から値を登録。
この手順でスクリプトステップを作ったのですが、どうしてもレイアウトの移動やフィールド設定のステップがフィールド数によって増えるため、ステップの処理時間が増えてしまっています。
iOSのローカルファイルから、サーバーにレコードをアップする時、または、ループ処理をする時にパフォーマンスを上げる方法などありますでしょうか?
>Mozさん
ありがとうございます。
「The Missing FileMaker 12 ExecuteSQL Reference」もダウンロードしたので、参考にさせてもらいます。
ここに書かれているように、ファイルメーカーでのSQL実行は、selectのみ対応ということでしょうか?
素人ながらSQLで情報抽出ができるようになったおかげで、スクリプトステップの簡略化に成功しました。
Chikutakuさん、Mozさん、いつもありがとうございます。
>Chikutakuさん
タイムスタンプは、日時だけの表示で良いのですね。ちなみに、この後テスト用に設定したG変数にも対応できているのを確認しました。
ありがとうございます。
さて、ORDER BYの項目ですが、実は降順に並べたいと思っています。
参考書を見ると、[DESC]が降順とのことですが、うまく表示されません。
ExecuteSQL ( "
SELECT \"x_レシートID\" , \"y_シンク作成日\"
FROM GOSYNC
WHERE \"s_シンク内容\" = ? AND \"y_シンク作成日\" > ?
ORDER By \"y_シンク作成日\" [DESC]
" ;
"" ;
"" ;
"new" ;
"2020-07-08 13:54:00"
)
There is an error in the syntax of the query.
という評価です。
テストのため、データビューアタイムスタンプを定数にして、結果を見ると、
ExecuteSQL ( "
SELECT \"x_レシートID\"
FROM GOSYNC
WHERE \"s_シンク内容\" = ? AND \"y_シンク作成日\" > TIMESTAMP '2020-07-08 13:54:00'
" ;
"" ;
"" ;
"new"
)
評価あり
ExecuteSQL ( "
SELECT \"x_レシートID\"
FROM GOSYNC
WHERE \"s_シンク内容\" = ? AND \"y_シンク作成日\" > ?
" ;
"" ;
"" ;
"new" ;
TIMESTAMP '2020-07-08 13:54:00'
)
<テーブルが見つかりません>
このようになるのはどうしてでしょうか?また、ORDER BYを取り入れたい(タイムスタンプの降順)どの場所に記入すると良いのでしょうか?
>Chikutakuさん
式の通り試したらできました。ありがとうございます。
なぜ、条件が最後になるかが疑問ですが、どこかで参考になる資料はあるでしょうか。
ちなみに現在、Filemaker16SQLリファレンスガイドというものを読んでいるのですが、具体的な式の記述方法は載っていないので、困っています。
追加質問
ステップ3:
次に、フィールド「タイムスタンプ」の値が、グローバル変数値:「$$TS」以降のレコードだけ抽出という条件、条件が複数になった場合は、どうなるのでしょうか?
ExecuteSQL ( "SELECT \"レコードID\" FROM TableB WHERE \"内容\" = ? \"タイムスタンプ\" > ? " ; "" ; "" ; "new" ; $$TS )
こんな感じでしょうか?
そしてそれをタイムスタンプ降順で並べる場合の ORDER BYは、どの箇所におくと良いのでしょうか?
>Chikutakuさん
こういうことでしょうか?
何れにしても、データビューアでこのような結果が帰ってきます。
ExecuteSQL ( "SELECT \"レコードID\" FROM TableB WHERE \"内容\" = ?new" ; "" ; "" )
結果:There is an error in the syntax of the query.
ExecuteSQL ( "SELECT \"x_レシートID\" FROM GOSYNC WHERE \"内容\" = "new"" ; "" ; "" )
結果:<テーブルが見つかりません>
Mac OS14 FM18を利用しています。
SQLに関して全く初心者で、使い方を勉強し始めたんですが、ファイルメーカー関数での書き方に四苦八苦しています。
ステップ1:
TO内の「TableB」にあるフィールド:「レコードID」を抽出できました。
ExecuteSQL計算式は式内に日本語が入ると、\"で囲むという情報をリファレンスで確認済み。
ExecuteSQL ( "SELECT \"レコードID\" FROM TableB " ; "" ; "" )
上の式で、テーブル内のレコード全てのIDを改行でリスト化することができました。
ステップ2:
次に、上の式にフィールド:「内容」の値が"new"のレコードだけ抽出という条件を加えました。
ExecuteSQL ( "SELECT \"レコードID\" FROM TableB WHERE \"内容\" = new" ; "" ; "" )
この式の結果が、The column named "new" does not exist in any table in the column reference's scope.
となっています。実際には、この「内容」の値が"new"というレコードは、5件あります。
式の書き方のご教授いただけないでしょうか。よろしくお願いします。
[ Generated in 0.013 seconds, 6 queries executed - Memory usage: 659.69 KiB (Peak: 704.23 KiB) ]