みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
$res="" ➡ $res=Left(checkbox & 数字; 0) //強制的に無意味な引数式を挿入
これをするとなると、初心者(私も含めて)には余計に難解になるともうけど。
あぁ ハンドルメネーム めちゃくちゃですねぇ。
面倒だから、一緒にしてしまいます。 お気付きの方も多いかと思いますが、同一人物でした。
で、最初の第2引数を使って変更した式を織り込んだものを修正版(v2)として
http://yahoo.jp/box/y08MkM
にアップしました。
///今後の投稿は シーラカンスで 通そうかと思います。
Shinさん
ありがとうごあいます。
なるほどと、だいたい理解し始めているところです。
まぁ、とにかく翻訳物のリファレンスが何位な日本語であることもあるのですが
元の英語版のリファレンスもかなり難解なのだろうと。。。。
それにしても、もっとユーザー目線のリファレンスが欲しいものですね。
今回のこの事例は、
次にアップする予定の 「FileMaker Pro7以降の データと計算の仕組み」に
織り込ませていただきます。
Hiroさん Shinさん
心から御礼申し上げます。
書かれている変更部分のことは
関数リファレンスに書かれている
Evaluate 関数には、オプションとして2番目の引数があり、ここに計算の基準となるフィールドを指定します。依存するフィールドの内容が変更されると、FileMaker Pro は、計算式が再評価されます。次の例では、「小計」が変更されると、「合計」が再計算されます。
のことなんでしょうか?もし、そうだとしてもかなり難解な説明のような気がしますが。
もう一つご教授を
サンプルファイルの中で Evaluateで2種類の集計をしていますが
この式でEvaluateの第2引数をひと湯としない理由を知りたいのですが。
ループ式内に自動更新に必要な再計算起動トリガー要素(引数)が無い為でしょう。
・簡単には、ループ式末尾のEvaluate()に起動トリガーフィールドを追加するのが楽でしょう。
Evaluate($recCal) → Evaluate($recCal; [checkbox; 数字])
・ただし、これで再評価発火するのは現在のレコードだけだから、それが対象レコード全域に反映されるべく、
・このループ計算フィールドをグローバル格納フィールドへ変更して最適化完了です。
Hiroさんありがとうございます。
さすがと感謝します。
しかし、こういう問題は、仕様の中に書かれていこと?
べつにエラーになっているわけではないので、
Evaluate($recCal; [checkbox; 数字])
の [checkbox; 数字] が必要なのか
どうにもわからないということなんです。
もともと こうした計算は
スクリプトで処理をするタイプの私には、理解が難しい関数です。
よろしくご教授を。
あぁ グローバル化するのは 作成過程でいっとき行ったのですが
私の計算式では、改善はありませんでした。
要は、FMPの昨日の知識とそれに基づく発想
ということになるかと思うのですが、
知識は、それなりにファイルを作るという積み重ねの中で
修得して行くことができると思います。
できるだけたくさんのファイルを実際に作ってみてください。
そして発想は、時には逆転の発想も必要になるかと思います。
頑張ってください。
入力されているデータには 時刻はありますか?
もしくは、日付と時刻を一緒にした タイムスタンプ データがありますか?
時刻が独立して入れば
検索モードで
日付に検索日を入れた後
次に時刻のフィールドに検索時刻を入れます
タイムスタンプなら
タイムスタンプのフィールドに検索のタイムスタンプを入れます
時刻を入力するところがないと
検索は無理です。
スクリプトを作る手順です
これはスクリプトの作成がわからないということですか?
もしスクリプトがわからないとうことでしたら
先日 スクリプトの入門テキストが 公開されたので
それをお読みになるのもいいかもしれませんね。
https://fm-aid.com/bbs2/viewtopic.php?id=6051
1:数字フィールドを作る 名前をたとえば カウント とする
2:スクリプトを作る
ステップは フィールド設定[テーブル::カウント:テーブル::カウント+1]
*上の式はイメージです。その点を考慮してください
3:これをボタンのスクリプトに設定
以上です。
ちょっと視点を変えると簡単に思いつくのでは?
動的値一覧がその目的を果たしてくれるのですが、
通常は前のフィールドに該当したものを表示というのが多いのですが
これを前のフィールド値に該当しないという条件で動的値一覧を作ります。
1:入力のレイアウトのテーブルに
計算フィールドで =”廃番” というものを作り グローバルに設定します
2:商品名のリストのテーブルに
廃番チェック などというフィールドを作り
廃番になったらこれにチェックを入れます
3:上記2の「廃番チェック」と1の「廃番」の計算フィールドをリレーション
この時 演算記号に≠(不等号)を使います。
4:3のリレーションで値一覧を作ります。
という流れのサンプルを
http://yahoo.jp/box/p4iftg
にアップしました。
そういうことなら
今回のグローバルフィールドのデータを
検索の都度、記録用のテーブルに書き込んで保存しておけば済みますよ。
で、いつも見たいときは、
その記録データをもとに
今回のような検索をすればいいわけです。
次にような流れはどうでしょう?
1:検索データ入力用のグローバルフィールドを作る
検索にひつよな数が必要
2:検索データ入力用のレイアウトを作る
これはなくてもいいのですが、入力位置を間違える対策用です
3:スクリプトを作る
A これは入力用レイアウトから検索用レイアウトに切り替え
上の設定をサンプルにしてあります。
http://yahoo.jp/box/t8J5Hh
でダウンロードできます。
お役に立てば。
B 検索用から入力・印刷用に戻って検索実行
>Evaluate ( Self ) コレだけのほうが、良いですね!
そうとは言えないかも
演算できない入力ミスのエラーが表示できない
表示の必要があるときは
それなりの式に変える必要があると思う。
私は、スクリプトトリガを使ってますが。
シャチ様、アドバイス有り難うございます。
また過去スレのリンク見ました、やはりバックアップ必須だなと思いました。
今後Timemachineで取ろうと思います。
Timemachineでの私のオススメではないです。
それでもある時点まで戻ることはできますが
それよりもTimestamp(単語が違うので注意)を使って
時折、ファイルそのものをFileMakerでファイル名に日時を加えてファイル名に変えて
バックアップすると言うことです。
過去の経験ですが
やはり、一度壊れたものはその後の壊れることが多かったかと思います。
できるだけ、時折バックアップを取っておかれることかと思います。
https://fm-aid.com/bbs2/viewtopic.php?id=6026
が参考になるかと思います。
それと、
リレーションの設定はコピペできませんが
テーブルのコピペができるので
設定だけはやり直すこともできますので。
後学のためにご教授願います。
テーブルを階層化する目的は何でしょうか?
非常に興味があるので、是非お願いします。
その下のテーブルをコピーして
新たなファイルの方の
データベース定義>テーブル> に貼り付け
をするとグラフにもでてくると思うけど
レスがつかないので、失礼を省みず
多分大変多い質問の部類なのでしょう。
「動的値一覧」というのを使うことになるんですが
と、ここまで書いて ん??
一つのフィールドでしたいってことではないですよね?
2つのフィールド間なら先に書いた「動的値一覧」です。
このサイトの「検索」で「動的値一覧」を検索して見てください。
で
Aの入力がないときのBのエラーは
スクリプトトリガで処理します。
スクリプトを作ります。
・IF[IsEmpty(テーブル名;;A)]
・ カスタムダイアログを表示 <==ここにエラーの文言を入力
・EndIF
といった感じです
画像などの表示方法については、
手前味噌で恐縮ですが
https://fm-aid.com/bbs2/viewtopic.php?id=5754
に紹介していますが、
ポータルを使った、ヒョ時、絞り込み表示などその他いろいろ
そんなサンプルと解説書を公開しています。
そのサンプルを分解いただくと
いろんなことを理解いただけると思います。
ご一読いただければ幸いです
もう一つ
テーブルがいくつ絡んでいるんでしょうか?
それらのテーブルがいくつかあるのなら
まとめることができないか?
まとめることができるのなら
そのリレーション側テーブルでの
集計で処理などでできないか?
そんなことも視野に入れると違った面の処理方法になるかもしれません。
問題は出力の時に必要なのかどうかです。
データが入力された時に計算をしておくことができるのなら
1日単位とか行った時間単位で
スクリプトを事項させて計算させてしまうということです。
(現在の計算式をスクリプトの中で使うということです)
これが
出力時に計算しなければならないということであれば
それは違った方法でということになるんでしょうが。。。。
どういうシステムなのかわからないので
失礼なお話になるかもしれませんが
なぜ、こんなに計算フィールドが多いのか
まずそれが問題になるでしょうし、
さらに計算がリレーションに関係すると
もうそれはとんでもないことになると思います。
計算が一時的に必要なものであるとしたら
スクリプトなどで現在の計算フィールドに計算結果を代入する方式に変えると
出力時間はかなり短くなると思います。
計算フィールドが非保存になっている場合を想定の話です。
索引が設定されている場合は、そんなにはかからないはずです。
非保存になっているものの見直しが必要かもしれません。
Substitute関数を使ってみてください。
なるほどぉ
ただ、その改行文字を入れるのがちょっと驚き
¶ を設定すると その ¶ そのものが表示されるので
入力のダイアログで それこそRetuenを押すのが肝要でした。
あぁそれと「選択」は外すですね。
頭良くなりました。
ありがとうございました
[ Generated in 0.013 seconds, 7 queries executed - Memory usage: 645.99 KiB (Peak: 694.9 KiB) ]