みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
WinXP FMP11です。
あるレコードで繰り返しフィールド(50)に記入されている値を
別のレコードにそっくりコピペする方法はありますか?
現在思いついていることは、スクリプトで
変数1=GetRepetition(繰り返しの1)
変数2=GetRepetition(繰り返しの2)
変数3=GetRepetition(繰り返しの3)
・
・
変数50=GetRepetition(繰り返しの50)
として
別のレコードに移動してから
フィールド設定 GetRepetition(繰り返しの1)に変数1
フィールド設定 GetRepetition(繰り返しの2)に変数2
フィールド設定 GetRepetition(繰り返しの3)に変数3
・
・
フィールド設定 GetRepetition(繰り返しの50)に変数50
という気の遠くなるような方法です。
もっとスマートな方法はありますでしょうか?
Offline
繰り返し数を変数で指定してLoopすれば、それほどでもないのでは。変数の方も繰り返しが使えます。$変数[$番号]という形式。
一度に設定できるのは、
エクスポートしてインポート
ルックアップ
ですね。
コピー
新規ウィンドウ
コピー元のレコードのみ対象に(ユニーク値で検索等)
エクスポート
ウィンドウを閉じる
ペースト
新規ウィンドウ
コピー先のレコードのみ対象に(同上)
インポートでレコードを更新
ウィンドウを閉じる
その他のフィールドがどうなっているのか分からないですが、
レコードコピーが手っ取り早いんじゃないかな。
繰り返しを使っていることが疑問です。。
Last edited by チポ (2013-08-30 16:18:15)
Offline
画面上に両方表示されてる状態なら、変数に入れないでも
変数を設定[$$N;Get(レコード番号)]
変数を設定[$i;1]
Loop
フィールド設定[繰り返しフィールド[$i];GetNthRecord(繰り返しフィールド[$i];$$N)]
変数を設定[$i;$i+1]
ExitLoopIf[$i>50]
End loop
レコードごとにシリアル番号とかレコードIDのフィールドとリレーション用のフィールドAを
作って、Aとシリアルで自己リレーション。繰り返しはこのリレーションでルックアップ設定
(内容が空欄でもコピーする)すると、コピーしたいレコードのシリアル番号を別レコードの
Aフィールドに入れると繰り返しがルックアップされます。
Offline
Repeaterさん ありがとうござます。
簡単にスクリプトを書くことができ、目的は達せられました。
旅人さん ありがとうございます。
ルックアップで可能であることは理解できました。
ただし、ミスタッチで更新中の繰り返しデータが初めのルックアップ値に戻りそうで心配です。
【解決です】 今度の新しい掲示板には進捗状況コメントはつけられないのでしたか?
Offline
【解決しました】
Offline
便乗質問させてください。
FMPro11 (win) です。
繰り返しフィールドをコピーするのに、loop処理を利用します。
今回のyukiさんの投稿では、繰り返し数が50となっていますが、
この繰り返し数を取得する方法はありますか?
(関数には無いみたいですが)
私の方で作成しているレイアウトは、たまに書式の変更があり、
場合により、繰り返し数を変更する場合がありえます。
繰り返しフィールドをコピーするスクリプトに、「50」と設定してしまうと、
そのフィールドの繰り返し数を「51」に変更してしまうと、
このスクリプトが正常に動作しなくなってしまいます。
(無論、スクリプトを修正すればいいのですが・・)
スクリプト内に、その繰り返しフィールドの繰り返し数を取得できれば、
スクリプトを修正することなく、繰り返し数を変更できます。
レイアウトで「表示している繰り返し数」ならFieldRepetitions関数がありますが。
Offline
他にはFieldNamesで繰り返しの最初の番号がわかりますね。
タブ順を設定しておいて、フィールドを移動しながら設定した方が簡単かな。
ありがとうございました。
確認してみます
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 521.63 KiB (Peak: 526.16 KiB) ]