みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
よろしくお願いします。
繰り返しフィールド[100]をすべてクリアしたいのですが、
現在は変数とloopを使って1から順に書き換えています。
何か一括でクリアするような方法はあるのでしょうか。
いろいろ有ったような気もするけど、対象レコードを1個に絞ったりする
必要もあって、結局はそんな方法に落ち着いたような?
Offline
・インポートによる方法
対象フィールドと同一構造のフィールドを持った空レコードを、対象フィールドのみ対象にしてインポートする。
・ルックアップによる方法
1.対象フィールドと同一構造のフィールドを持った消去用テーブルを用意し、"1"等の適当な値を入れたキーフィールドも加える
2.対象テーブルにもキーフィールドを追加し、こちらは空にしておく
3.対象フィールドのテーブルと消去用テーブルで、キーフィールドによる=照合のリレーションを張る
4.対象フィールドに空欄でもコピーするルックアップ設定を行い、ルックアップ先を消去用テーブルの消去用フィールドにする
5.消去したいレコードのキーフィールドに、消去用キーフィールドと同じ値を設定すれば、対象フィールドが空になる
結局どちらもスクリプトより面倒です。
速度が問題なら、ループ展開した方が早いケースはあるかも知れません。
ルックアップは、一致し得ないフィールド同士の自己リレーションで、一致する値がない場合空欄を入力
とすれば。
どっちにしても、スクリプトにしないといけないだろうから、ループの方が素直かも。
Last edited by wader (2014-12-11 20:12:52)
Offline
日常的な運用法で、
フィールド内容を削除する
また、
繰り返し100回のフィールド
これらを考え直すべきかもしれませんよ。
Offline
なるほど勉強になりました。
みなさん、ありがとうございました。
解決してるけど、補足。
wader
> ルックアップは、一致し得ないフィールド同士の自己リレーションで、一致する値がない場合空欄を入力とすれば。
ほんとだ、これで充分でした。
後はスクリプトで対象レコードしぼって再ルックアップかけるか、
キーフィールドの変更で、繰り返しの一括クリアかかりますね。
-
粗いですがベンチマーク取ったら、ルックアップによるクリアが圧倒的に速い。
もちろん再ルックアップの場合は対象レコードの絞込が入るので、
レコード数や繰り返し長、格納方法等の条件によって大きく変動はするけど。
質問した方の実際は分かりませんが、グリッド等のUI目的で繰り返し多用するのはありというか、
現状のFileMakerでは他にまともな代替手段ないので、高速なクリアの手法が確認できてよかった。
Get(レコードID)の計算値自動入力で自己リレーションすれば、そのフィールドを消(して入れ直)すことで再ルックアップによる消去が完了します。
一致しなければいいのだから、最初は空欄でもいいのか。レコードIDを入れると消去。
> Get(レコードID)の計算値自動入力で自己リレーションすれば、そのフィールドを消(して入れ直)すことで再ルックアップによる消去が完了します。
同じベンチマークで試したら、再ルックアップスクリプトステップの方がごく僅かに速い。
と思いきや、繰り返し長によってはloopの方が速くなります。
繰り返し数2000では、再ルックアップステップ → キーフィールド再設定による再ルックアップ → loopの順に速い。
これが繰り返し数上限の32000では、loop → 再ルックアップステップ → キーフィールド再設定による再ルックアップの順。
恐らくバッファの取り方なんかが影響してるんでしょうけど、面白い。
なお上記は単一レコードのケースであって、複数レコードの場合は、
再ルックアップステップ → loop → キーフィールド再設定による再ルックアップの順になり、
レコード数に応じて差は大きくなります。
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 517.44 KiB (Peak: 521.98 KiB) ]