みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
どうしてもやり方が分かりません。何らかのヒントをいただければありがたいです。
windows7 FMP12で運用しています。
テーブルが2つあります。
主テーブル
id、内容1、内容2、内容3 ・・・ のフィールドで出来ています。
項目テーブル
id,key,value の3つのフィールドで出来ています。
主テーブルと項目テーブルはidを使ってリレーションが組んであります。
項目テーブルの内容は
id 001 , 001 ,001
key chr001 , chr002 ,chr003
value いちご , みかん , りんご
と言う形でデータを持っています。
項目テーブルには同じidに対して300ヶほどの値が(chr001 ~chr300 まで)が入っています。
主テーブルの内容1にchr001、内容2にchr002、内容3にchr003と順番に値を入力したいのですが、内容1、2,3を計算フィールドにして、
計算式の中でchr001、chr002・・を指定して、値を参照するにはどうすればいいのでしょうか?
グローバルフィールドを使って、リレーションを組めば参照できるとは思いますが、リレーションの数があまりに多くなるので、実用的で無いと思っています。
何がやりたいのかイマイチ分かりません。
「id」フィールドでリレーションが成立する項目テーブルのが
"chr003" 以降も "chr004" "chr005" と続く場合、内容4、内容5・・・に "chr004" "chr005" と入れたいのですか?
これではせっかくテーブルを分けている意味がありません。
Offline
項目テーブルの内容は
id 001 , 001 ,001
key chr001 , chr002 ,chr003
value いちご , みかん , りんご
これは、
以下1行を1レコードとして
id key value
001 chr001 いちご
001 chr002 みかん
001 chr003 いちご
こういうことですか?
そうであれば、
主テーブルで内容フィールドでは無く、
ポータルで表示ができます。
ではないのかな?
表題もなんか違うようで気になるし。。
Offline
idでリレーションを張っておいて、List() 関数で chr001... を取り込んでおき、GetValue() で分離する式にする、という方法で良いのかも。
具体的な必要性がわかりませんがね。
Offline
皆さんありがとうございます。
元のデータはORACLEのデータなのです。
そのデータを、ファイルメーカーに1日数回ずつインポートして使おうとしています。
オラクルのテーブル構造がそんな風になっています。
オラクルのテーブル
主テーブル
ID , 倉庫名
001 , 大阪
002 , 名古屋
項目テーブル
id key value
001 chr001 いちご
001 chr002 みかん
001 chr003 りんご
002 chr001 レモン
002 chr003 ブドウ
002 chr005 すいか
このテーブルを
ID , 倉庫名 , CHR1 , CHR2 , CHR3 , CHR4 ,CHR5
001 , 大阪 , いちご, みかん , りんご
002 , 名古屋 , レモン, "" , ブドウ , "" ,すいか
こういう表に変換したいのです。
エクセルでコピーするときに行列を入れ替えできますが、それと同じ事をしたいのです。
クロス集計というのかもしれません。
CHR1,CHR2の項目が300項目くらい有り、テーブルもいくつかに分かれています。
なので、主テーブルのCHR1を計算フィールドにして、データを引っ張れないかと思った次第です。
GETVALUE( LIST( VALUE), 2) とかすれば良さそうなのですが、項目テーブルのCHR1,CHR2が歯抜けになっているので、CHR10は必ずしも10番目の項目となりません。
chr001 いちご
chr002 みかん
chr003 りんご
リレーションを使って、このリストを取得して、その中からchr003を検索するようなことをしたいと考えています。
質問内容は予定カレンダーの考え方とほぼ同じなので、カレンダー関連の過去ログを参考にされては?
繰り返しフィールドのルックアップ特性を利用する手法が簡便かと。
Offline
皆さまありがとうございます。
結局ExecuteSQLで逃げました。
ExecuteSQL(
"SELECT b.\"KOUMOKU_VALUE\"
FROM \"FM.DATA_HEADER\" AS a INNER JOIN \"FM.DATA_CHR\" AS b ON a.\"ID_CODE\" = b.\"ID_CODE\"
WHERE b.\"KOUMOKU_KEY\" = 'CHR001' AND a.\"SINSEI_CODE\"=?";
"";"" ;
SINSEI_CODE)
”繰り返しフィールド”はやり方が分かりませんでした。
ExecuteSQLは更新されるタイミングがよく分からないので、リレーションを上手く使ったやり方を、もう少し調べてみます。
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 519.41 KiB (Peak: 523.95 KiB) ]