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

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

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

You are not logged in.

Announcement

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


#1 2020-12-11 17:03:42

げっさん
Member

リレーションシップと新規レコードの自動作成について

お世話になります。

以前、「別々のファイルへのリレーションシップについて」
https://fm-aid.com/bbs2/viewtopic.php?id=11194というタイト
ルで質問をさせて頂きリレーションの事をしっかりと理解したつもりでし
たが、またまた疑問に思うことが出てきましたので質問させて下さい。

テーブルA
A主キーフィールド
A1フィールド
A2フィールド

テーブルB
B主キーフィールド
A外部キーフィールド
B1フィールド
B2フィールド

テーブルC
C主キーフィールド
A外部キーフィールド
C1フィールド
C2フィールド

上記のように3つのテーブルとそれぞれフィールドがあり、テーブルAに新
規レコードを作るとテーブルBとCにも自動的に新規レコードを作りたいと
考えております。テーブルはそれぞれレイアウトが違いますが、テーブル
Aのフィールドを共通で使うものが多くあります。よって、A1とA2フィー
ルドをそれぞれテーブルBとテーブルCにも表示させたいのですが、私が考
えると以下の様になります。

リレーション設定
A外部キーフィールド(テーブルC)←--[=]---A主キーフィールド(テーブルA)---[=]--→A外部キーフィールド(テーブルB)

テーブルBとテーブルCに対して、「::A1」と「::A2」フィールドを追加し
ます。テーブルAで入力した二つのフィールドが両方のテーブルに反映し、
それぞれ固有のフィールドであるB1やC1フィールドを入力すれば完了とな
ります。

ただ、ここで問題になるのは、上記のようにするとリレーションシップと
してテーブルBとCには自動的に新規レコードが作られない事が以前の質問
で分かったのですが、ここからが質問と言いますか悩んでいるところです。

通常、新規レコードをそれぞれ自動的に作るにはテーブルAに対して「::B1」
フィールドと「::C1」フィールドを作り、ここに値を入力しなければなり
ませんよね?!

ここに何か自動で入力出来れば自動的にレコードを作れるはずですが、や
はりその方法しか自動的にレコードを作れる方法は無いんでしょうか?ま
た、ここに自動的に値を入力するにはやはりスクリプトを使わなければ無
理でしょうか?何かもっと簡単に二つの異なるテーブルの新規レコードを
作れる方法はないでしょうか?

Offline

#2 2020-12-11 17:39:47

チポ
Member

Re: リレーションシップと新規レコードの自動作成について

何もしないで新規レコード作成は無理です。
スクリプトを使えば極簡単にできるでしょう。

Offline

#3 2020-12-11 18:08:43

Shin
Member

Re: リレーションシップと新規レコードの自動作成について

無駄な空のレコードを作る必要があるのですか。例えば、顧客履歴を作るとして、来店されたらレコードを作るとして、その時に話だけして帰られた時にも、空の販売伝票を書きますか。

メインのテーブル以外のレイアウトは、集計用などと考えられればいかがでしょうか。
通常の入力は、メインのテーブルで関連フィールドを含めて行います。このときに、関連フィールドにデータを入力すれば、リレーションでレコード作成が許可されていれば、関連レコードが作成されます。つまり、この関連レコードに入力がないものは、作られていない、という運用になります。無駄を省けますよ。

Offline

#4 2020-12-12 17:01:50

Shin
Member

Re: リレーションシップと新規レコードの自動作成について

https://www.dropbox.com/s/1eskkpbbipxvd … 2.zip?dl=0
のサンプルファイルをダウンロードしてください。
テーブル定義やレイアウトの構造を見る前に、レイアウトA(テーブルA)にレコードを作り、レイアウトB, C のレイアウトで、テーブルB, C に入力してみてください。
この動きではいかがですか。

動きを確認したら、ログインしなおして、スクリプトやレイアウトの設定などの裏舞台を確認してみてください。私が前回や今回説明しているように、リレーション先に空レコードをわざわざ作らる必要がないことがお分かりになると思います。

Last edited by Shin (2020-12-13 08:48:24)

Offline

#5 2020-12-14 10:27:37

げっさん
Member

Re: リレーションシップと新規レコードの自動作成について

チポさん

返信ありがとうございます。

やはりそうですよね。
確かに、スクリプトを使えばと思ったのですが、私自身見落としてないかと思って質問させて頂きました。

ありがとうございます。

Offline

#6 2020-12-14 10:33:09

げっさん
Member

Re: リレーションシップと新規レコードの自動作成について

Shinさん

返信ありがとうございます。

空レコードという訳では無く、テーブルAのレコードは営業、テーブルBは
事務、テーブルCは企画みたいな感じになります。そこで、営業が入力す
るテーブルAのフィールドがテーブルBやCにも共通であり、全てが同じシ
リアルナンバーで繋がっているという事なので、営業がレコードを作った
と同時にそれぞれのテーブルでレコードを作れると良いと思っていたので
質問をさせて頂きました。

サンプルファイル、ありがとうございます。
まさしく、私が思っている通りの動きをしておりました。で、肝心な中身
を確認しようと思いましたが、自動ログインしてしまうので、管理者とし
てログイン出来ません。

どうすれば宜しいでしょうか?

Offline

#7 2020-12-14 13:13:16

Shin
Member

Re: リレーションシップと新規レコードの自動作成について

その動きでいいんですよね。メインのテーブルで新規レコードを作っても、他のテーブルでは何の動きもありません。閲覧できるレイアウトも、テーブルA のレイアウトのみです。これがリレーションの基本的な使い方のひとつです。
サンプルファイルは、admin のアカウントが生きています。option または shift を押して、ファイルを開いてください。ログインダイアログが開きます。

ただ、
> テーブルAのレコードは営業、テーブルBは事務、テーブルCは企画みたいな感じ
ですと、問題が起こります。
共通のデータを営業が必ず先に入力するのでしたらこの構造でいいのですが、先に企画がその他が作ることになると、営業データの入っていない営業レコードが作られてしまいます。共通のデータのみを別のテーブル(マスターといいますね)で作るといいでしょう。

Last edited by Shin (2020-12-14 14:46:34)

Offline

#8 2020-12-14 14:31:30

げっさん
Member

Re: リレーションシップと新規レコードの自動作成について

Shinさん

無事に管理者としてファイルを開けることが出来ました。ありがとうござ
います。何かボタンを押しながらと思っていましたが、shiftとは思って
いませんでした。

で、本題に入りますと、今ままで私が考えていたリレーションシップとは
主キーと外部キーを繋げてリレーションシップを組み、テーブルAの主キー
とテーブルBの外部キーを繋げ、それぞれのレイアウトで表示するのが当
たり前だと思っていましたが、これは全然考え方が違いますね!!

まさか、テーブルBに対してテーブルAのレイアウトを表示されるという発
想は目からウロコでした。さらに、本来私の考えですとテーブルAの主キー
の値をテーブルBの外部キーに表示させるのが基本と思っていましたが、
まさかテーブルBにテーブルAのレイアウトを表示させ、そのままテーブル
Aの主キーを表示させるとは今まで無かった発想です。

しかも、これがリレーションの基本的な考え方なんですね・・・。

以前、テーブルオカレンス名を変更後、自動で戻すには?
https://fm-aid.com/bbs2/viewtopic.php?id=10591
で質問をさせて頂いたのは、まさしくこの問題といいますか、この為に質
問をさせて頂いておりました。言い方を変えると、全く変更する必要がな
かったという事ですよね・・・。今まで作ったレイアウトやリレーション
を改めて見直してみたいと思います。

共通のデータを営業が必ず先に入力するのでしたらこの構造でいいのですが、先に企画がその他が作ることになると、営業データの入っていない営業レコードが作られてしまいます。共通のデータのみを別のテーブル(マスターといいますね)で作るといいでしょう。

こちらに関してですが、原則営業が必ず先に入力するので問題はないです。

改めまして、本当にありがとうございます。

Offline

#9 2020-12-14 14:53:42

Shin
Member

Re: リレーションシップと新規レコードの自動作成について

テーブル構成についてですが、営業が入力しているデータを全て別の部署でも共有してもいいのでしたらいいでしょうが、実際には部外秘のデータがあるはずです。接待費は見られたくないでしょうし、営業部での顧客ランクもみられたくないですよね。
また、会社名の小さな変更などは、企画部で行ってもいいと思いますが、そのさいに、営業部が管理しているデータを書き換えていいのか、という問題が発生します。そのために、共通のマスターテーブルと各部署ごとのテーブルを分けるのは必要ではないでしょうかね。

Offline

#10 2020-12-14 17:07:15

げっさん
Member

Re: リレーションシップと新規レコードの自動作成について

Shinさん

返信ありがとうございます。

そのために、共通のマスターテーブルと各部署ごとのテーブルを分けるのは必要ではないでしょうかね。

セキュリティの件に関しては、オープニングスクリプトで表示されないよ
うにしようかと思っていました。ただ、共通のフィールドがあると分かっ
ているなら、事前に別テーブルとして作っておいた方が運用しやすいとい
う事ですよね?!マスターテーブルとは、私自身はあくまでも各テーブル
共通で使う例えば都道府県とか郵便番号などを別テーブルにしておくと考
えていたのですが、それだけではないんですね?!

例えば、A〜Dまでの共通フィールドがあるとすれば、それを別テーブルに
しておき、そちらを参照にするようにリレーションを組めば良いという事
でしょうか?となると、マスターテーブルはあくまでも入れ物だけであ
り、レイアウトとして表示させないという考え方で宜しいでしょうか?

ただ、テーブルAとBのみ共通の場合や、テーブルAとCのみ共通というのも
あるのですが、その場合はあくまでも3つのテーブルに共通のフィールド
のみマスターテーブルとした方が良いのでしょうか?

Last edited by げっさん (2020-12-14 17:20:46)

Offline

#11 2020-12-14 17:21:15

Shin
Member

Re: リレーションシップと新規レコードの自動作成について

顧客マスターを編集することもあるでしょうから、そのレイアウトは必要でしょう。
さらに、顧客マスターの情報を表示し、各部署ごとの情報を入力させるレイアウト(レイアウトのオカレンスは、顧客マスター)を作り、顧客マスターのフィールドは触れないようにしておくといいですね。

Offline

#12 2020-12-15 09:21:53

げっさん
Member

Re: リレーションシップと新規レコードの自動作成について

Shinさん

なるほど、ではテーブルA、BとCに対する共通マスターテーブルを作成し、
そちらのレイアウトオカレンスはそのマスターテーブルという事ですね。

まずは、今回教わったヤツをやってみて、必要であればマスターを作って
みます。

本当にありがとうございます。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.016 seconds, 9 queries executed - Memory usage: 556.19 KiB (Peak: 577.09 KiB) ]