MicrosoftAccessでは、テーブル間のレコード移動なんていう操作は簡単でした。
ココに注意
いざ、FileMakerでテーブル間でのレコードの移動をさせようとした時に方法が見つかりません!?
なぜ、レコードを移動させる必要性!?
現在とあるシステムを改修していますが、20万件あるレコードに複雑に絡み合ったリレーションシップと計算フィールドと集計フィールド、そしてルックアップ値などの関係から、ローカルでは我慢できるスピードで動いてくれる時もありましたが、
ココがダメ
FileMakerServerにすると反応が返ってきません!(フリーズ状態)
通常であれば、何十万件になっても、テーブルを分割するような事はしなくても良いようなFileMaker仕様だと思います。
テーブルごとのレコードの数: | ファイルの耐用期間全体で 6 京 4,000 兆 |
ところが、他の方が作った作品なので、あまりいじりたくない状態からの改修なので、テーブル構造などは変えずに動作を軽くしたいと考えました。
そうなると、テーブルのレコード数を減らすのが一番簡単ですよね。
レコードのテーブル間移動が簡単ではない!
ネット検索で、「レコードのテーブル間移動」などで検索しても妥当な答えが見つかりません。
質問系のページに正に自分と同じような質問をしている記事を発見しました。
この質問に関しての回答は、
さらに詳しく
エクスポートしてインポートする方法
をお勧めしていました。
その前に、現テーブルから、別テーブルにレコードを移動させる必要性があるのか!?
そこからシステムの設計を考え直した方が良いという回答でした。
確かに、
テーブルごとのレコードの数: | ファイルの耐用期間全体で 6 京 4,000 兆 |
なので、1つのテーブルにレコードの種類を分けるフィールドを準備してフラグを立てるだけで事は足りてしまう可能性もある。
理屈は理解しましたが、自分の場合は他の人が作ったものなので、あまり触らずに動作を軽くしたいのです。
やっぱり、エクスポートとインポートしかなさそうですかね???
エクスポートしてインポートする方法
対象テーブルのレイアウトから、スクリプトで納品日の検索をして絞り込んだレコードをエクスポートするスクリプトを作成しました。
納品日が、3年以上も前のレコードをエクスポートしました。
ココがポイント
"..." & Date(Month(Get(日付));1;Year(Get(日付))-3)
エクスポートするファイルの種類は数種類ありましたが、FileMakerのファイル種類でエクスポートしました。
CSVファイルなどだと先頭レコードがフィールド名などが含まれていた時に除く設定にしたりしましたが、FileMakerのファイル形式だと何も考えなくても良いみたいです。
インポートするテーブルもエクスポートするテーブル構成と同じなので、「全て移動」にしました。
次に、インポートするテーブルレイアウトに移動してから、「ファイル>>レコードのインポート>>ファイル」
にて、先ほどエクスポートしたファイルを選択しました。
最初にインポートすると、フィールドがでたらめにインポートされてしまいました。
ココがポイント
「照合名順」とすることで、同じ名称のマッピングがされる
これで別のテーブルに検索してレコードを追加することができました。
このままでは、元テーブルには、レコードが残っています。
手動で「対象レコード削除」にて元テーブルからレコードを消して、やっとレコードのテーブル間移動ができた訳です。
アーカイブという考え方は無い!?
もしかすると、FileMakerってデータをアーカイブするという考え方は無いのかもしれません。※あったら教えてほしい。
FileMakerの仕様をみると、上限ファイル(サイズ最大 8 TB)が許される限りレコードは無限に近い数を追加することができるように思われます。
つまり、計算フィールドや集計フィールド、ルックアップ値などを必要最低限に抑えれば、テーブルを分割する必要性は無いって事じゃないかと思います。
今回自分の場合は、テーブル構成を触りたくなかったので、データをアーカイブする意味もあり、テーブル間でレコードを移動しましたが、まともに設計されて、それなりに軽快に動くような状況であればテーブルを分けてアーカイブする必要性も無いってことでしょうかね。
まだまだ、FileMakerは分からない事が多いです。