みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
テーブルBとテーブルCがあり、この両者に2種類のリレーションを定義しています。
リレーション名を仮に「あ」と「い」とします。
「あ」テーブルB::コード = テーブルC::コード
「い」テーブルB::キー = テーブルC::キー
テーブルB
コード キー チーム名
111 111-1 チーム名1
111 111-2 チーム名2
111 111-3 チーム名3
テーブルC
コード キー メンバー名
111 111-1 メンバー名1
111 111-1 メンバー名2
111 111-1 メンバー名3
111 111-2 メンバー名4
111 111-2 メンバー名5
111 111-3 メンバー名6
「あ」のリレーションでは、テーブルBのどのレコードからも関連レコードはテーブルCのすべてのレコードとなります。
「い」のリレーションでは、関連レコードはテーブルBのキーに対応したそれぞれ3件、2件、1件のレコードとなります。
このようになっているとき、テーブルBのレイアウト上で関連レコードへ移動のスクリプトステップで
関連レコードの取得元を「い」と指定しても、「あ」のリレーションが使われて、テーブルCの全レコードが対象になってしまいます。
どんなことが原因と考えられるでしょうか。ヒントだけでもいただけますと幸いです。
なお、テーブルBのレイアウト上で「い」を使ったポータルを作ると、正しく(「キー」ごとの)関連レコードが表示されます。
Offline
まず、「リレーション名」というのは存在しません(FM6までの考え方)
2つのテーブル間に2つのリレーションを定義することはできません。(リレーショングラフでリング=循環=が存在する状態は作れない)
正しい「テーブル(オカレンス)名」を元に、現在の状態を考え直してみてください。
> 「あ」テーブルB::コード = テーブルC::コード
> 「い」テーブルB::キー = テーブルC::キー
これはあり得ません。
例えば、
「い」テーブルB::キー = テーブルC 2::キー
の様に、
リレーション「あ」と「い」のテーブルオカレンスは必ず異なっていなければなりません。
そして、このテーブルオカレンスは、
レイアウト、および、そこに配置するフィールドにも関わってきます。
それらをもう一度チェックですね。
Offline
まず、「リレーション名」というのは存在しません(FM6までの考え方)
2つのテーブル間に2つのリレーションを定義することはできません。(リレーショングラフでリング=循環=が存在する状態は作れない)正しい「テーブル(オカレンス)名」を元に、現在の状態を考え直してみてください。
コメントありがとうございます。
# FM6のシステムを18に移植中なのです…
説明が間違っておりました。
以下リレーションシップのところで指定しているオカレンス名とリレーションの状態です。
テーブルB
コード
キー
テーブルC
キー
テーブルC②
コード
テーブルB::キー = テーブルC::キー
テーブルB::コード = テーブルC②::コード
のようになっています。
テーブルCもテーブルC②もデータソースはテーブルCです。
テーブルBを使用するレイアウトが選択されている状態で、
関連レコードへ移動のスクリプトステップで関連レコードの取得元を「テーブルC」、レコードの表示に使用するレイアウトのテーブル名が「テーブルC」であっても、
「テーブルC②」のリレーションが使われて、テーブルCの全レコードが対象になってしまうようなのです。
テーブルCのファイルには、以前の古いリレーションが設定されたままになっています。
こちらのオカレンス名は念のため「旧テーブルC」と名前を変えました。
関連レコードへ移動のスクリプトステップでは、スクリプトがあるファイルに定義されているリレーションが使われるという理解で良いでしょうか。
スクリプトとリレーション定義があるファイルと、テーブルBとテーブルCのあるファイルはすべて別々になっています。
Offline
> 「あ」テーブルB::コード = テーブルC::コード
> 「い」テーブルB::キー = テーブルC::キー
これはあり得ません。例えば、
「い」テーブルB::キー = テーブルC 2::キー
の様に、
リレーション「あ」と「い」のテーブルオカレンスは必ず異なっていなければなりません。
コメントありがとうございます。
himaganee様へのレスに改めて説明させていただきました。
異なるテーブルオカレンスとして定義しています。
Offline
テーブルB::キー = テーブルC::キー
を使った関連レコードへ移動、で、対象レコードから、を選択していませんか。
Offline
テーブルB::キー = テーブルC::キー
を使った関連レコードへ移動、で、対象レコードから、を選択していませんか。
関連レコードのみを表示にチェックを入れて、
「現在のレコードのみ照合」を選択しています。
上記の質問は、「現在の対象レコード内のすべてのレコードを照合」を選択していないか、ということでしょうか。
もしこちらを選択していた場合、テーブルBは全件表示の状態なので、テーブルCも全件対象になってしまうはずですがそうなっていませんでした。
Offline
>スクリプトとリレーション定義があるファイルと、テーブルBとテーブルCのあるファイルはすべて別々になっています。
レイアウトもスクリプトと同じファイルに作ってますか?
何となく、移動後にテーブルCの(オカレンスでなくベーステーブル)ファイルを見ているような気がする。
> スクリプトとリレーション定義があるファイルと、テーブルBとテーブルCのあるファイルはすべて別々になっています
この
スクリプトとリレーション
の部分が理解できません。。
いずれにせよ、
設定とレイアウトの再度のチェックが必要では。
Offline
>スクリプトとリレーション定義があるファイルと、テーブルBとテーブルCのあるファイルはすべて別々になっています。
レイアウトもスクリプトと同じファイルに作ってますか?
何となく、移動後にテーブルCの(オカレンスでなくベーステーブル)ファイルを見ているような気がする。
ありがとうございます。
この可能性があるので確認します。
スクリプトとリレーション
の部分が理解できません。。
これは、テーブルだけのファイルと、スクリプトとレイアウトだけのファイルを分けて作っているという意味です。
点検して結果をまた書き込みします。
Offline
スクリプトだけのファイルって理解できません。
スクリプトは、
その時に選択されているレイアウトで実行されます。
Offline
スクリプトとレイアウトだけのファイルも、レイアウトがあるのでしたら外部データソースを参照する別のテーブルオカレンスが存在するはずです。
オカレンスを取り違えているのでは。(おそらく、元のテーブルのオカレンスとリレーションをそのまま使っている)
Last edited by Shin (2020-02-08 15:12:44)
Offline
何度もすみません。文字での説明が難しいので、関連レコードに移動のスクリプトステップについてサンプルファイルとスクリプトを作ってみました。
https://bitsend.jp/download/06c453b8a75 … 14426.html
①解凍してメニュー.fmp12を開く
②「テーブルBリスト」のボタンを押す
③各レコードにある「メンバー一覧(チームのみ)」「メンバー一覧(クラブ全体)」のボタンを押す
このボタンにはそれぞれ別々の「関連レコードに移動」のスクリプトステップが設定されています。
④意図としては、「メンバー一覧(チームのみ)」を押したときは、キーが一致するデータセットが抽出されて、
「メンバー一覧(クラブ全体)」を押したときは、コードAが一致するデータセットが抽出されてほしいのですが、
このサンプルでは、どちらもキーが一致するデータセットが抽出されます。
テーブルBリストのレイアウト内に設置したポータルの方は、指定したオカレンスごとに正しく該当データが出ています。
ここで扱っているテーブルA、テーブルB、テーブルCはそれぞれテーブルA.fmp12、テーブルB.fmp12、テーブルC.fmp12にあり、
スクリプト及びリレーションを定義しているメニュー.fmp12とは別ファイルです。
このようなファイル構成で「関連レコードに移動」のスクリプトステップは使えないのでしょうか。
(レイアウトは、そのレイアウトで表示するテーブルがあるファイルに存在しなければいけない、など)
====
サンプルファイルとスクリプトの内容を以下まとめました。
テーブルA.fmp12上にある テーブルA
コードA,数字
クラブ名,テキスト
テーブルB.fmp12上にある テーブルB
コードB,数字
コードA,数字
チーム名,テキスト
キー,テキスト
テーブルC.fmp12上にある テーブルC
キー,テキスト
メンバー名,テキスト
_コードA,テキスト
メニュー.fmp12上にあるリレーションシップ定義
テーブルA(テーブルA::コードA) = テーブルB(テーブルB::コードA)
テーブルB(テーブルB::キー) = テーブルC(テーブルC::キー)
テーブルB(テーブルB::コードA) = テーブルC 2(テーブルC 2::_コードA)
メニュー.fmp12上にある「メンバー一覧(チームのみ)」ボタンの動作
関連レコードへ移動 [ テーブル: 「テーブルC」; 使用するレイアウト: 「メニュー コピー2」 (テーブルC) ] [ 関連レコードのみを表示]
メニュー.fmp12上にある「メンバー一覧(クラブ全体)」ボタンの動作
関連レコードへ移動 [ テーブル: 「テーブルC 2」; 使用するレイアウト: 「メニュー コピー3」 (テーブルC 2) ] [ 関連レコードのみを表示]
Offline
提示されたサンプルでは、何方のボタンも同じスクリプトを呼び出していますが????
Offline
提示されたサンプルでは、何方のボタンも同じスクリプトを呼び出していますが????
わざわざ試していただいたありがとうございます。
申し訳ありません!どちらも「メンバー一覧(チームのみ)」ボタンの動作となるスクリプトが設定されていました!
直したところ、問題なく正常に動作しました!
また出直しいたします。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 605.46 KiB (Peak: 622.37 KiB) ]