マイクロソフトのデータベースアクセス(以下Accessに略)なら、テーブル間でレコードを移動するなんで簡単でした。
しかし、FileMakerの場合は、そういったデータベースの概念がないのか!?
ココがダメ
テーブル間でレコードを移動させるにに苦労させられました!
https://pctips.jp/database/filemakerpro-move-record/
ネット検索しても同じような事例が見つからない
たぶん、FileMakerでは、テーブルを分割して利用するという概念がないのかもしれません。
巨大な複数レコードが存在するテーブルでも処理する能力があり、入力したデータを削除するとか、別テーブルに移動させるという概念がないのかもしれません。
自分の場合は、他人が作成したFileMakerのプログラムを改修する必要性があり、何をやっているのか不明点が多く、なるたけテーブル構成は変えたくなかったので、テーブルを分割するという考えに至った訳です。
今回やりたいことをまとめると、
メモ
Aテーブル(レコード移動実験)から期間検索したレコードだけを、Bテーブル(レコード移動テーブル)に移動
つまり、レコードを移動させるという事ですが、コピー先にコピーしてから、コピー元から対象レコードを削除するという方法でもいい訳です。
実験データを準備
1つのファイルに、同じような2つのテーブルを作成して、レコードの以上実験をしたいと思います。
あらかじめ、レコード移動実験テーブルには、5レコードのダミーを入力しておきました。
ココに注意
入力すると、ハウスキーピングフィールドは自動で値が入力されました。
まずは、移動元テーブルから日付にて検索するスクリプトを準備しました。
とりあえず、5年前以上のデータだけを検索させるようにスクリプトを組みました。
変数の設定、GetValue、Loopでテーブル間レコードコピー成功
いろいろと実験してみて、ようやく一つの方法を見つけることができました。
(1)コピー元レイアウトにて、検索して移動したいレコードを絞る
(2)最初のレコードから開始して、Loopさせながら、最後のレコードで抜けるスクリプトを組む
(3)Loop内にて、コピー元のフィールドを変数に設定する。
ココがポイント
変数を設定[$変数名; 値; GetValue(コピー元テーブル::コピー元フィールド名 :1)
GetValue ( 値一覧 ; 値番号 )
改行文字に挟まれた値一覧から、値番号により、値を得ることができる。
(例)GetValue ( "ロンドン ¶ パリ ¶ 香港" ; 2 ) は、パリを返します。
(4)レイアウトを、コピー先に変更してから、「新規レコード/検索条件」にて、1レコードづつ追加していきます。
1レコードついたした後に、フィールド設定にて、コピーデータを入力します。
ココがポイント
フィールド設定[コピー先テーブル::コピー先フィールド名; GetValue($変数名;1)
変数は、1項目しか入力されてないので、GetValue($変数名;1)ということで、1番目を指定します。
(5)あとは、コピー元の最終レコードまでLoopすればOKです。
ここまでで、別テーブルにレコードの追加が完了しました。
あとは、元テーブルから削除すればいいだけなので、下記のようにしました。
レコードごとにコピーさせる方法は無いのか?
注意ポイント
コピーというのは、一時的にメモリに記憶させられるだけで複数フィールドを分けて貼り付けなどは出来ないようです
一つのキーワードをコピーして、別レイアウトに移動して検索するようなケースには便利な機能かもしれませんが、レコードをコピーして別レコードに貼り付けするような事は出来ないようです。
現時点では、レコード丸ごと別レコードにコピーするような機能は見つかりませんでした。
メンドクサイですが、Loopを組んで1レコードづつ処理するしかないようです。
ただ、Loopを組んでも高速で処理をしてくれるようなので助かります。