初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-01-22 09:57:54

st-taka
Member

特定のグループのレコードをコピーして同じテーブルに複写したい

いつも大変お世話になっています。

次のようなテーブルがあったとします。
ID     No     G    F2
1        1      1     AAA
2        2      1     GGGG
3        3      1    YYYY
4        1      2   
5        2      2   
6        3      2   
7        4      2
8        1     3
     

F1のグループ1のデータをコピーして、次のようにグループ2に複写したいと思います。

ID     No     G    F2
1        1      1     AAA
2        2      1     GGGG
3        3      1    YYYY
4        1      2    AAA
5        2      2    GGGG
6        3      2    YYY
7        4      2
8        1      3

現在検討している方法は、ダミーテーブルを用意して
・ ダミーテーブルにグループ1のレコードをインポート
・ グループ2にダミーテーブルからインポート

あるいはダミーテーブルを作らないで
・グループ1をFM形式でエクスポート
・エクスポートしたファイルをグループ2にインポート

もっと良い方法がありましたらご指導ください。

Offline

#2 2019-01-22 10:14:07

チポ
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

良い方法かは分かりませんが、
現テーブルだけでの処理方法を。

コピー元だけを対象レコードとして、
最後のレコードから順に、
  レコードコピー
  必要な入力
  レコードを対象外に
  レコードを対象外に

これを対象レコードがなくなるまで繰り返す。

Offline

#3 2019-01-22 12:23:30

Hiro
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

グループ1のデータレコード数が、既存のグループ2の空レコード数を超える
場合の処理は、コピーしない? 不足レコード追加してコピー?

Offline

#4 2019-01-22 13:39:05

st-taka
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

Hiro wrote:

グループ1のデータレコード数が、既存のグループ2の空レコード数を超える
場合の処理は、コピーしない? 不足レコード追加してコピー?

該当するレコードがない場合はコピーしません。
レコードの照合キーは例の場合は"No"です。

Offline

#5 2019-01-22 14:13:11

チポ
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

ああ、そういうことでしたか。。

インポートが簡単と思いますが、現テーブルだけでの方法を。

Gと照合するためのフィールドを作り、
Noとandでリレーションします。

  グループ1を検索
  照合用に2を全置換入力
  関連レコード移動でグループ2を対象に
  F2を再ルックアップ

手順だけですが。。

Offline

#6 2019-01-23 16:48:29

gotani
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

こんな感じのスクリプト書きます
元データを変数に保存して 検索して更新って感じですね

#-------------------------
グループ1の検索
#-------------------------
先頭に移動
$i=0
loop
  $i=$i + 1
  $NO[$i]=NO
  $F2[$i]=F2

次に移動 終了判定[オン]
end loop

$iの回数=$i
#-------------------------

$i=0
loop
  $i=$i + 1
   ------------------
   G=2とNO=$NO[$i]
   で検索
   ------------------

   IF データがあったとき
       F2=$F2[$i]
    ENDIF

   EXIT IF $i =$iの回数
end loop

Last edited by gotani (2019-01-23 17:18:10)

Offline

#7 2019-01-23 18:41:51

Shin
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

8        1      3    AAA
と、しなくていいのですか。

Offline

#8 2019-01-30 15:00:03

st-taka
Member

Re: 特定のグループのレコードをコピーして同じテーブルに複写したい

みなさま

ご報告が大変遅くなりまして申し訳ありません。
おかげさまで無事解決しました!!!

gotaniさんにご指導いただいた Loopとレコード検索を使う方法は”処理が遅くなる”というか先入観を持っていましたが、
実際にやってみると高速に出来ることがわかりました。

約1.2万件のレコードの中の3000件のレコード(フィールド数20)をgotaniさんの方法で、同じテーブルの中の別の場所に検索して複写する処理を試みたところ、
ローカル環境では約13秒
FMServer環境では60秒でしたが、サーバー上のスクリプト実行で行うと約13秒

いづれの場合も期待以上の早い速度で出来ることがわかりました。

心よりお礼申し上げず。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 10 queries executed - Memory usage: 561.72 KiB (Peak: 566.6 KiB) ]