みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
IDや日付などでリレーション先から該当するレコードを取得するとき、
一度全レコードを読むことになると思うのですが
計算はされずに、該当するレコードが抽出された時点で再計算されるのですか?
また、
ポータルでも、ポータルに呼び出されたあとに再計算されるのでしょうか?
対策としてエリア情報用の専用テーブルを作成し、定期的に元のテーブルから未登録のエリア情報を専用テーブルに追加する方法を採りました。
これは適宜手動でコピー、インポートされているのですか?
それにしてもやはり値一覧の対象が多いと遅くなるんですね
対象レコードに計算フィールドが含まれていても、そのフィールドが画面に表示されるフィールドに関係ないならその計算は実行されない感じです。
例えばリレーション、ポータルなどで100あるレコードの中から10を取り出したとします
すると再計算されるのは10だけ、ということでしょうか?
非保存の計算フィールドでフラグ処理やSUMしている場合なども、その10レコードに関係するものだけ再計算されて、
90のレコードは再計算されないということでしょうか?
例えば、1万レコードと1000万レコードのテーブルがあったとして
計算フィールドで検索しない限り、レイアウトの表示やポータルでの抽出に
目立った差はないということでしょうか?
レイアウトを開くたびに再計算されるのでやはりレコード数が多くなると
なかなか表示されない、ということがあるでしょうか?
対象レコードに計算フィールドが含まれている場合もだめなんですかね?
検索や表示が遅くなるというのはどの程度のレコード数からなんですか?
気になったところでは以下のようなところです
・普通のフィールドが10個、索引なし非保存の計算フィールドが10個程度あったときでは何レコードくらいから動作が重くなるか
・FMのバージョンは関係あるか
・リレーションの数やレコード数の関係(ポータル表示やID取得などの速度)
・フィールド内容を値一覧に指定しているときは、そのレコード数によって遅くなるか(値一覧を呼び出すたびに対象の全レコードを読んでいるのか)
数千程度のレコードしかあつかったことがないのでみなさまの経験上の感覚から
なんとなくでもよいので教えてください
ちなみにPCのスペック的には
CPU Core i5 4世代以降
メモリ 8から16G
SSDもしくはHDD
程度を想定しています
売上テーブルがあり、それを元に請求書を発行したいです
具体的なやりたいことは、
請求書作成用のレイアウトにポータルを配置してそこに未請求分の一覧を表示したいです
売上テーブルに
取引先 金額 請求フラグ(済なら1)
A 1000
A 2000
B 500
B 500
とあったら、ポータルに
取引先 金額
A 3000
B 1000
と表示させ、それをクリックすることで関連レコードを印刷レイアウトに表示させて
印刷したいです
アドバイスよろしくおねがいします
WIN10 FMP16です
例としてフィールドAに『りんご』があれば
という条件にするにはどうしたらいいですか?
フィールドAには『りんごとはちみつ』
とはいっているときには真
フィールドAがりんりんらんらん
なら偽
ということです
バックアップフォルダにあるバックアップを起動してバックアップすると
フォルダパスの都合で保存できなくなります
変数を使ってできないか色々ためしてみましたが
うまくいきません
あまりに気になったのでPCを立ち上げ確認してきました(これはスマホでかいてます)
やはり先述の通りでしたおさわがせしました
Evaluateではなく直接計算式をかけば動作するようです
伝票テーブルに明細テーブルをidでリレーション
伝票テーブルに計算式マスタを計算式idでリレーション
伝票テーブルのレイアウトに明細をポータル表示
ポータルフィールドにトリガでスクリプト
フィールド設定
Evaluate(計算式マスタ::計算式)
で?が返る
表形式でスクリプトを実行するとなぜかきちんと計算結果が返る
という状態です
とここまで書いて気が付きました!
単価マスタの計算式を
フィールドA×100としてましたが
明細テーブル::フィールドA×100
にしなければならないのかもしれません
スクリプトがフィールドを見つけられないのだと思います
今日はできないので明日やってみます
ポータル上でスクリプトを使い計算させたいです
計算式IDでリレーションした関連テーブルから取得した計算式を
Evaluateで計算したいのですがうまくいきません
スクリプトのフィールド設定で計算したいフィールドを選び
計算式に
Evaluate(計算式マスタ::計算式)
としていますが結果は?です
なぜか表形式でスクリプトを実行すると正常に計算されます
ポータルに表示されているのが原因なのでしょうか?
単価などはマスタから持ってくるし複雑な計算フィールドの場合は参照しまくるので
結局保存できないのでそのように書きました
伝わりにくかったならすみませんでした
計算実行のときの速度ではなく、
計算フィールドだと非保存になるので
数字フィールドにして、計算はスクリプトトリガで行えば
検索時やレイアウト切替時に再計算しないので速くなりますか?
ということです
個数フィールドを変更したときに、個数×単価を行い、その結果を数字フィールドに格納するような
スクリプトトリガという感じです
例なので単純な式にしてますが、他テーブルを参照したりする複雑な式などでも効果はありませんか?
チポさん
ファイル名を直接タイムスタンプに変更すると
file:/E:/フォルダ/バックアップ/ファイル名2017‐07‐13‐181655.fmp12
という形にできなくありませんか?
file:/E:/フォルダ/2017‐07‐13‐181655.fmp12
となってしまいます
計算フィールドを参照した計算フィールドや他テーブル参照したものを使用すると、レコードが増えたときに
検索などが遅くなるので、
第一計算フィールドの計算結果を 数字フィールドに代入して、
第二計算フィールドは数字フィールドを参照するようにすると軽くなるでしょうか?
そのために
IF ( フラグ = 1 ; "赤" ; "青" )
という計算結果をやったあと、
第一計算フィールド = 数字フィールド
という計算をさせたいのですが、
IF ( フラグ = 1 ; "赤" ; "青" ) & 第一計算フィールド = 数字フィールド
などとしても計算できません
IF関数終了後、というのはどこに記述したらよいのでしょうか?
また、自己リレーションでも遅くなるのでしょうか?
「aevt」; 「odoc」
は記述しなくてよかったんですね
できました
一瞬DOS窓みたいなのがうつりますね
qb_dpさん
Event を送信 を選んでどこにそれを記述したらよですか?
テキストや計算のところにかきましたがファイルエラーやフィールドがありません
のエラーがでてできません
これだったかどうかわかりませんがここの真ん中あたりに書いてありました
2) 不必要なインターフェース
https://emptypage.jp/translations/benroe/gui.html
どこでみたか忘れました
ファイルメーカーで、というわけではないのですが
配色や、レイアウトなど
デザイン的な勉強をしているときにみつけました
ダイアログでは
はい いいえ ok などではなく
削除しますか?
する しない
などとしたほうがよいようですし
そもそも選択肢がないなら必要ないようです
OK押そうが押すまいがもう終わったことなので…
OKを押すことによって、ユーザーが確認した、とかいう承認印的な証拠を残したいなら別でしょうけど
わざわざOKをクリックする必要があるからです
つまりOKしかないダイアログを出すのは無意味だということです
削除しますか? はい いいえ
ならいいのですが
削除しました はい
というのは無駄です
動作を軽くするには
できるだけ計算フィールドを使わずに
スクリプトで計算した結果を数字フィールドにいれたほうがいいですか?
例えば個数×単価=金額の計算などをすべてスクリプトとトリガでやるような感じです
ところでバックアップ完了後に
完了したことを通知したいのですがカスタムダイアログではOKを押すだけの
無駄なものを表示してしまうことになります
使いやすいソフトをつくるときに
そういった意味のないダイアログはUIやUX的にはタブーだということです
画面中央あたりに、ふわっとバックアップ完了というテキストを表示させるようなことはできないでしょうか?
Substitute ( Get ( ファイルパス ) ; Get( ファイル名 ) & ".fmp12" ; "") & "バックアップ/" & Get( ファイル名 ) & Substitute ( Get ( タイムスタンプ ) ; [ "/" ; "_" ] ; [ " " ; "_" ] ; [ ":" ; "" ] ) & ".fmp12 "
こんな感じでしょうか?
もっとスマートにかけますか?
バックアップを作成するスクリプトをつくろうと思ったのですが
フォルダパスを指定するのではなく、そのファイルがあるフォルダにバックアップを作成するには
どのようにしたらいいですか?
パスを取得する関数では、ファイル名まで含めたフルパスになってしまうようで
それではできませんよね?
WIN10
FMP16
カスタム関数は、どのようなときに、どのように使用していますか?
変数を用いたスクリプトとの使い分けがわかりません
区分IDごとに、あるフィールドの計算式を変えて計算したい場合は、
区分IDと計算方法を格納したマスタのIDとをリレーションして
Evaluate関数を使うものでしょうか?
区分IDや計算式は今後も増えたり、修正したりするので、スクリプトやIFで分岐させると後々修正が大変になりそうです
マスタにある既存の計算方法を変更するときの対策(過去のレコードが変わってしまわないように)としては、マスタとレコードの日付をみて、マッチするものが適応されるようにします
[ Generated in 0.077 seconds, 7 queries executed - Memory usage: 705.58 KiB (Peak: 743.23 KiB) ]