みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
質問させてください。m(_ _)m
計算フィールド(非保存ではない)でExecuteSQL関数を使ったものがあり、
その値を使ってポータルを作成していますが、原因不明でデータが歯抜けになってしまいます。
計算フィールドを再計算すると歯抜けが直るのですが、方法が一度テキストフィールドにして保存し
その後計算フィールドに戻すというような方法でやっています。
これをスクリプトで再計算させることは出来ますでしょうか?
調べたところ、再ルックアップや全置換えというものがあるようですがフィールド内容全置換えは灰色で選択できず、
自分では解りませんでした。方法ありましたらお教え下さい。
非保存にすれば問題なさそうですが、レコード数が多くなるため、再計算の方法が知りたいです。
よろしくお願いします。
説明が抽象的で、具体的状況の把握ができません。
そのため、問題の原因探査も、当然、その対処策も考察できません。
Offline
Hiroさん
すいません。自分で後から見直してみても訳が解らなかったです・・・。
質問を簡略しまして、
非保存でない計算フィールドを再計算させるにはどうしたら良いですか?
に代えさせていただきます。
その計算フィールドが参照しているフィールドを更新するのが、一番簡単でしょう
ExecuteSQL でしたら、無理です。
フィールドの定義で、索引をオフにして保存、再度索引をオンするのが確実かも。
その必要が高いのならば、Evaluate() を使ってその関数を評価させる、さらに、依存するフィールドを指定しておき、それを触るようにすればいいかも。
Last edited by Shin (2019-03-14 15:44:09)
Offline
その計算フィールドの内容が分らないと何とも言えません。
ExecuteSQL関数式なら尚の事!
Offline
ご返信ありがとうございます。
計算フィールドの中身は
ExecuteSQL(
"
SELECT MIN(\"注文個別No\")
FROM \"注文明細\"
WHERE \"卓番号\"=?
GROUP BY \"商品名\"
"
; ""
; ¶
; 卓番号
)
というもので、この式もこちらのサイトで見つけたものを応用したものになります。
用途は注文明細テーブルの同じ卓番号の商品名でグループ分けして最初の注文個別Noを羅列し集計用IDとし、
リレーションを使ってポータルで注文個数を集計するといったものです。
これがたまに最初の注文が集計用IDの数字の羅列で出てこない時があり、ポータルに表示されないときがあります。
再計算すると直るので、質問させていただいた次第です。
ExecuteSQLの更新が無理とのことでしたら、非保存にするほか無いでしょうか?
将来的に何十万レコードとなるものを上記の使い方で非保存にするのは若干不安ではあります。
>#6『ExecuteSQL(・・・・・; ""; ¶; 卓番号)』
この式なら、「卓番号」フィールドを更新再計算の発火トリガーに使えば良いでしょう。
具体的には、「卓番号」フィールドを自己の値で書き換えます。
現在のレコードのみ更新の場合:
フィールド設定[本テーブル::卓番号; 値:本テーブル::卓番号]
現在の対象レコードすべて一括更新する場合:
フィールド内容の全置換[本テーブル::卓番号; 値:本テーブル::卓番号]
Offline
次回反映され無かった時に試してみます。
助かりました。ありがとうございました。
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 556.34 KiB (Peak: 579.97 KiB) ]