パソコン情報

【FileMaker Pro】テーブル間でレコード移動する方法はLoopと変数の設定で解決

マイクロソフトのデータベースアクセス(以下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を組んでも高速で処理をしてくれるようなので助かります。