みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
先日下記トピックで質問いたしました。
https://fm-aid.com/bbs2/viewtopic.php?id=830
今回、フィールド6~10の空欄ではないフィールドを、
別のテーブルへそれぞれ1レコードとして取込みするにはどうしたらよいでしょうか。
環境はFMpro12 win7です。
Last edited by nego (2014-02-22 16:45:58)
Offline
全部空欄ではないレコードもあるわけですから、別テーブルのフィールドも5個必要なわけで、
普通にインポートするだけかと。
Travellerさん
ありがとうございます。
説明が下手で申し訳ないのですが、
別テーブル(テーブルBとします)へのインポートは下記のようにしたいのです。
テーブルA → テーブルB
1レコード目 フィールド6 1レコード目 フィールド1
1レコード目 フィールド7 2レコード目 フィールド1
1レコード目 フィールド8 3レコード目 フィールド1
1レコード目 フィールド9(空欄)
1レコード目 フィールド10(空欄)
2レコード目 フィールド6 4レコード目 フィールド1
2レコード目 フィールド7 5レコード目 フィールド1
2レコード目 フィールド8 6レコード目 フィールド1
2レコード目 フィールド9 7レコード目 フィールド1
2レコード目 フィールド10(空欄)
Offline
テーブルBのフィールド1を常時空欄不可にしておいて、レコードIDとかとともに5回インポート
レコードIDでソートする。
計算式の繰り返しフィールドを作り、それらのフィールドのデータを格納。
テーブルBでそのレコードをインポートし、繰り返しはレコードへ分解すると良いでしょう。
計算フィールドは、
Extend ( GetField ( "フィールド" & ( Get ( 計算式繰り返し位置番号 ) + 5 ) )
でいいでしょう。データに改行が含まれ無いのでしたら、
GetValue ( List ( フィールド6[1] ; フィールド7[1] ; フィールド8[1] ; フィールド9[1] ; フィールド10[1] ) ; Get ( 計算式繰り返し位置番号 ) )
の方が一般性があっていいでしょう。
Last edited by Shin (2014-02-22 23:37:10)
Offline
繰り返しの計算フィールドなんか作らなくてもList関数で取り出した値を引数にしたら空欄とかも勝手に詰めてくれるし楽だと思う。
いろいろなアドバイスありがとうございます。
Travellerさん
テーブルAのフィールド数は5個で質問しましたが、実際はもっと増えます。(現状でも12個)
さらにテーブルAのレコード数は何千とあるので、インポートを繰り返すとかなり時間がかかりそうです。
Shinさん
繰り返しフィールドですね!
なんとなく繰り返しフィールドを使ってできるのではないかと思っていましたが、
どう使えばいいのかよくわかりませんでした・・・。試してみます。
通りすがりさん
最初の質問で教えていただいたList関数を使うということですね?
>取り出した値を引数にしたら
のところをもう少し詳しく教えていただきたいです。
Offline
繰り返しフィールドを作ると、スクリプトを使わずとも、手動でのインポートでもインポート時の設定で、レコードに分解してくれる事です。特に、レコード数が多い時には、非常に大きなメリットだと思いますが。
数十個程度のレコードでしたら、list を作ってインポート後にスクリプトで処理、とか、リレーションを張って、ポータルの中でレコードを作っていく、という方法でも早い処理が可能です。
もとの質問の状態からでしたら、フィールド1〜5から直接データを取り込めば良いでしょう。途中に空白が有っても、インポート後に検索して削除した方が早いかもしれません。
Last edited by Shin (2014-02-22 23:35:26)
Offline
Shinさん
より詳しい説明ありがとうございます!
場合によってのいろいろな方法やメリットを教えていただいてとても勉強になります。
自分なりに最初にやってみた方法は、リレーションでレコードを作る方法で、
フィールド5個で1,000フィールド程度ならあまり気にならないスピードでしたが、
12個のフィールドを5,000レコードで実行したところ1時間以上かかりました。。。
スクリプトにも問題はあったと思うのですが(汗)
教えていただいたことで改善していけそうです。
ありがとうございます。
Offline
Shinさん
繰り返しフィールドを作って、インポートしてみました。
やりたいことはできました!
しかし時間がかかってしまいます。
1000レコード分の繰り返しフィールドのインポートで10分程度。
こんなものでしょうか?
Offline
繰り返し12にして1000レコードのインポートで、約0.8秒でしたが。
取り込む側に、自動入力や複雑なフィールド制限などが設定して有りませんか。
Offline
取り込む側 とは、テーブルBの方でしょうか?
テーブルBのフィールドはすべてテキストで設定しています。
新たなファイルを作ってインポートしてみましたが変わりませんでした。
テーブルA側の方に原因がありますよね・・・。わからなくて困りました。。
Offline
計算式の繰り返しフィールドを作り、それらのフィールドのデータを格納。
テーブルBでそのレコードをインポートし、繰り返しはレコードへ分解すると良いでしょう。計算フィールドは、
Extend ( GetField ( "フィールド" & ( Get ( 計算式繰り返し位置番号 ) + 5 ) )
でいいでしょう。データに改行が含まれ無いのでしたら、
GetValue ( List ( フィールド6[1] ; フィールド7[1] ; フィールド8[1] ; フィールド9[1] ; フィールド10[1] ) ; Get ( 計算式繰り返し位置番号 ) )
の方が一般性があっていいでしょう。
繰り返しフィールドの計算は、後者を使っていましたが、前者へ変えたところ少しは速度がアップしました。
フィールド6~10も計算フィールドなことが重くなる原因でしょうか。
Offline
計算が非保存なのでは。
Offline
日常的にそのインポートを行うのですか。運用を考え直すべきでは。
Offline
waderさん
非保存でした。
「計算結果を保存せず必要時に計算する」チェックを外したところ、データベース更新が終わらなくなってしまいました(汗)
Shinさん
インポートは頻繁に行うつもりでおりました。
まさかこんなに時間がかかるとは。
仰る通り少し時間をかけて運用の考え直しが必要そうです。
いろいろとアドバイスありがとうございました。
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 600.29 KiB (Peak: 617.2 KiB) ]