みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FileMakerServer17(WindowsServer2019)
FileMakerPro15~17の混在(Windows10)
ローカル環境が8割、外からのSSL接続が2割
テーブルA:受注案件データ
テーブルB:所在地ログ[現在は1,000レコードくらいですが商品が移動する度に増え続ける]
テーブルAーテーブルBはシリアルNo(数値、索引設定済)でリレーション[作成時タイムスタンプの降順でソート]
テーブルAのリスト形式の表示[全体約60,000レコードから必要な約4,000レコードを該当レイアウトを開く時にスクリプトで検索済み]に、テーブルBの所在地フィールド[テキスト]を表示させるとテーブルAのスクロールがかなり遅くなるかと思います。
テーブルAにも所在地フィールド[テキストを]作っておいて、テーブルBの所在地ログの新規レコード作成時に、リレーション先のテーブルAの所在地フィールドに同じ書き込みをする事も検討しましたが、同タイミングでテーブルAを誰か他の人が編集中の可能性もあり躊躇しています。
もし何かいい方法があればご教示頂きたいです
Offline
まずは、ファイルの最適化をしてみられては如何でしょうか。場合によっては、劇的に早くなります。
それで効果が無ければ、テーブルBの最新データのみを取り出したテーブルを作り、テーブルAからリレーションしてみるといいかもしれません。テーブルB に更新レコードが作成されれば、更新データをそのテーブルに吸い取らせます。
Offline
テーブルAにBの最新レコードのIDを持たせ、それと連結したテーブルB’を一覧で表示してみてはどうでしょう。
■追加フィールド
テーブルA::最新所在地ID 計算タイプ(もしくは自動入力の計算値) if(テーブルA::更新日時;テーブルB::ID;Self)
※テーブルAの更新タイムスタンプを「更新日時」、テーブルBの主キーを「ID」と仮定
■リレーション
テーブルA::最新所在地ID = テーブルB’::ID
これで一覧にテーブルBではなくテーブルB’のフィールドを設置します。
Aからみて1対1になるので早いと思います。
ただ更新タイムスタンプがトリガなので、ロックしただけで更新しなかったりレコード復帰された場合は更新されない可能性があります。
スケジュールやなにがしかのタイミングで テーブルA::最新所在地ID <> テーブルB’::ID のレコードを訂正する処理が必要です。
私が対応した案件では格段に一覧表示が早くなったのと、常時リアルタイムで最新を確認するわけではなかったため、この問題は訂正処理で許容出来ました。
許容出来ない場合はShinさんの案の方がいいですね。
レイアウトテーブルからみて連結先が1なのか多なのかが重要です。
Offline
> テーブルAにBの最新レコードのIDを持たせ、それと連結したテーブルB’を一覧で表示してみてはどうでしょう。
これいいですね。
所在側のテーブルでは、データの追加は、その最新レコードを複製して、複製元のデータを書き換えます。直前の最新レコードは、レコードIDを上書きさせます。
ただし、この動きでは、そのデータが設定された日、というものが不明瞭になりますが。
Offline
Pages: 1
[ Generated in 0.022 seconds, 9 queries executed - Memory usage: 508.04 KiB (Peak: 514.68 KiB) ]