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

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

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

You are not logged in.

Announcement

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


#1 2022-07-20 14:05:26

IWGO
Guest

参照元のレコード数を算出したい

こんにちは、掲題の件質問させてください
環境はwin10pro
Filemaker19pro です

他のFMのDBをリレーションで繋げています
その時、参照元へ書き込み権限がなく、また、与えることもできません

テーブルの値はリレーションを組んでいるので、
持ってくることは可能ですが、
参照元のレコード総数を持ってこれません

どうすればできますでしょうか

参照元は一切いじれない権限なので、
参照元で、レコード総数を出すフィールドを作る、
参照先でいじれる権限を付与するとかはできないのでなしでお願いします

#2 2022-07-20 15:20:13

Moz
Member

Re: 参照元のレコード数を算出したい

参照元ファイルのTOが参照先のリレーションシップグラフに入っているなら
参照先に参照元TOのレイアウトを作ることはできるのではないですか?
そのレイアウトでレコードを表示すればOKかと。

そもそもの話で参照元への権限がないのはなぜでしょうか?
理由によっては技術的に出来たとして契約的にNGということもあるので一概にやってヨシとなりません。

Last edited by Moz (2022-07-20 15:20:35)

Offline

#3 2022-07-20 15:42:51

IWGO
Guest

Re: 参照元のレコード数を算出したい

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

すみません、教えてください。
TOが何なのかわかりません。

理由は他部署の物だからです。
参照はいいけど、いじってはNGとは言われているので権限がありません。

参照元のだけでは私の部署が欲しい情報が足りず、
それを流用して新たなマスタを作りたいのです。

例としてあげると、
■参照元
・氏名
・住所 があったとしても、電話番号がありません

そこで、
■参照先(私作成)
・氏名(参照元から表示)
・住所(参照元から表示)
・電話番号 といった具合で、必要な情報を足したいのです。

参照元100件、参照先99件と差異がでた時、
修正が必要な為、参照元のデータ総数が知りたいです。

参照元が作ってくれないので、こちらで作るしかありません。
なぜ作ってくれないかなどは会社の理由になりますが、
契約的にNGなどの制約は一切ないという前提ですので大丈夫です。

ご配慮ありがとうございます。

#4 2022-07-20 15:49:17

Shin
Member

Re: 参照元のレコード数を算出したい

氏名住所 があって、電話番号を追加したい場合、元テーブルでユニークなID などがあれば、その ID と、電話番号 だけのテーブルを作り、実務用のテーブルからは、その両方のテーブルを参照すればいいです。電話番号はこちらの管理下にありますので、追加編集は自由です。
レコード総数の必要性については、わかりませんが。IDをこちらにインポートして、電話番号を追加すれば、リスト表示で抜けているところは一目でしょう。
氏名住所は、インポートしない方がいいですよ。あちら側で管理しているということは、常に修正がかかっている、という意味でしょうから。

Last edited by Shin (2022-07-20 15:53:44)

Offline

#5 2022-07-20 16:12:27

IWGO
Guest

Re: 参照元のレコード数を算出したい

Shin様

参照元にはユニークIDなどがありません
本当に、氏名、住所が並んでるだけなんです。
おっしゃる通りあれば楽だったんですけどね。。。

なので、総数の違いから差異を見つけ出すしかないと思っているのが現状です。
他にもっとうまい参照の仕方があればいいんでしょうが、思い浮かびませんでした。

#6 2022-07-20 16:42:16

Moz
Member

Re: 参照元のレコード数を算出したい

TOというのはテーブルオカレンスを指します。
リレーションシップグラフの右側に説明が表示されていると思います。(表示されていなければアイコンを押せば出ます)

リレーションシップグラフでテーブル名と同じ名前または似たような名前の四角い枠がTOです。
これを繋げてリレーションを設定します。

Shinさんが書いていますが1対1のリレーションを作って不足フィールドを補うのが手っ取り早いでしょう。

ユニークなIDが無いと書かれていますが、
最初に「リレーションで繋げている」と毎自身で書いていますよね?何でリレーションしているのでしょう?

また、現在の FileMaker は新規テーブルにユニークなIDを含むデフォルトフィールドが作成されます。
「主キー」フィールドもないのですか?(古いバージョンで作ったなら無いカモですが)

Offline

#7 2022-07-20 17:31:40

IWGO
Guest

Re: 参照元のレコード数を算出したい

Moz様

テーブルオカレンスのことですね、勉強になります
ありがとうございます。

>ユニークなIDが無いと書かれていますが、
最初に「リレーションで繋げている」と毎自身で書いていますよね?何でリレーションしているのでしょう?
社員番号です。
社員番号でリレーションを組んで他の情報を引っ張ってきていますが、
退社で大本から消えた場合
社員番号が変わる場合(弊社の都合ですが、変わることがあります)
入所で社員番号が増える場合

この~なった場合の時に、総数が違って、初めて誰かが増えた減った、変わったがわかるようにしたいのです。

>また、現在の FileMaker は新規テーブルにユニークなIDを含むデフォルトフィールドが作成されます。
「主キー」フィールドもないのですか?(古いバージョンで作ったなら無いカモですが)
ありません。
中身が見れないのでわかりませんが、参照元で消したのかもしれないです。

#8 2022-07-20 17:57:54

himadanee
Guest

Re: 参照元のレコード数を算出したい

総数を知りたいだけなら、SQL関数が簡単じゃないかな。
ExecuteSQL ("SELECT COUNT(*) FROM \"テーブル名\"" )
しかし退所と入所が同時にあったら総数を見てもわからないんで、あんまり意味がないような...

うまくいってるなら別にいいんですけど、普通は退社してもマスターから削除しないし、社員番号を変更したりしないんじゃないでしょうかね...(関連するあらゆるデータを修正しなくてはなりません)

#9 2022-07-20 19:02:41

Shin
Member

Re: 参照元のレコード数を算出したい

> 参照元にはユニークIDなどがありません 本当に、氏名、住所が並んでるだけなんです。
> 社員番号でリレーションを組んで他の情報を引っ張ってきていますが、
どちらが本当なのですか??

加減については、必要に応じて、全数を照合インポートすればわかりますよ。新規レコードは、レコードの作成タイムスタンプでわかりますし、削除されたものは、インポート直後に、過去のものと合わせて対象外になっています。

Last edited by Shin (2022-07-20 19:06:39)

Offline

#10 2022-07-22 11:21:50

IWGO
Guest

Re: 参照元のレコード数を算出したい

himadanee様

ありがとうございます、こちらで無事できました!!!

なお、ご心配して頂いたことは下記にて回答します
>しかし退所と入所が同時にあったら総数を見てもわからないんで、あんまり意味がないような...
情報をインポートして、こちらで増やしたいフィールドがあるので、
例として100を基準とした時、
向こうで削除された場合、こちらで削除されないので、総数不一致となります(大本総数99、こちら100
向こうで追加された場合、情報をインポートするので、総数一致となります(大本総数101、こちら101
また、増減が同時にあった場合、大本は変わらず100ですが、こちらは、消えないので、101になります

>うまくいってるなら別にいいんですけど、普通は退社してもマスターから削除しないし、社員番号を変更したりしないんじゃないでしょうかね...
マスタから削除するし、社員番号が変わります。色々あるので、これは会社事情ですね。
これのせいでややこしいです。

Shin様
すみません、私の読解力不足で、うまく説明できていないのだと思います
■大本情報
社員番号:123456789
氏名:森 太郎
住所:東京都〇〇 これだけありますが、列IDなどはありません

なので、仕方なく社員番号でリレーションしていますが、
社員番号が変動するおかしな会社なので、

■大本情報
社員番号:987654321
氏名:森 太郎
住所:東京都〇〇 となることがあります

なのでインポート情報は、社員番号で照会し、次は、氏名と住所で照会し、完全に一致させるようにし、
そこで古い社員番号を大本で削除されれば、総数が変わってくる仕組みにしたかったのです。

古い社員番号は即削除されずに1年ほど残ってしまうので、ないなら削除、とできないのもつらいところです。

#11 2022-07-22 12:13:50

Shin
Member

Re: 参照元のレコード数を算出したい

社員番号もリストにあるのですね。

社員番号は、使い回しはしていないですよね。その2年後に、森次郎さんに987654321が割り当てられる、というような。
でしたら、確かに変な管理ですが、社員番号が準ユニークとしておけばいいと思います。できれば、こちらのデータベースでは、完全なユニークIDを与えておいたほうが、後々の管理には便利ですよ。

社員番号の追加は、住所が同時に変更されている可能性も十分考えられるので、氏名でできるものとしておきます。(実際の運用で考えてください)

こちらのデータベースは、
社員キー
社員番号
氏名
住所
作成日
修正日
削除
という社員テーブルと、
社員キー (UUID でも、シリアルでもなんでもいいです)
社員番号
という管理テーブルを作ります。
社員番号でリレーションしておき、社員番号の社員キーは、管理テーブルよりルックアップしておきます。
インポートすると、新規社員と変更された社員は社員キーがありません。それを抽出して、社員テーブルで氏名で自己リレーションしておき、社員キーをそのリレーション先の社員キーで設定し、さらに、管理テーブルの社員番号に、その社員番号を追加します。(改行区切りのテキストにします)新規社員の社員キーも作られますので、再ルックアップすれば、社員テーブルに社員キーが登録されます。

レイアウト切り替え [ 「社員テーブル」 (社員テーブル) ; アニメーション: なし ]
レコードのインポート [ ダイアログあり: オフ ; テーブル: 社員テーブル ; 「fm-aid13309.fmp12」 ; 更新; シフト JIS ] 
新規ウインドウ [ スタイル: ドキュメント ; 使用するレイアウト: <現在のレイアウト> ; 上: Get ( ウインドウ上位置 ) + 20 ; 左: Get ( ウインドウ左位置 ) + 20 ] 
対象外のみを表示
If [ Get ( 対象レコード数 ) ] 
	フィールド内容の全置換 [ ダイアログあり: オン ; 社員テーブル::削除 ; 1 ] 
End If
対象外のみを表示
エラー処理 [ オン ]
検索実行 [ 記憶する ] 
If [ Get ( 最終エラー ) = 0 ] 
	レコード/検索条件/ページへ移動 [ 最初の ]
	Loop
		If [ Count ( 社員テーブル 氏名::社員番号 ) ] 
			フィールド設定 [ 管理テーブル 氏名::社員番号 ; List ( 管理テーブル 氏名::社員番号 ; 社員テーブル::社員番号 ) ] 
		Else
			フィールド設定 [ 管理テーブル::社員番号 ; 社員テーブル::社員番号 ] 
		End If
		レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了: オン ]
	End Loop
	検索実行 [ 記憶する ] 
	If [ Get ( 最終エラー ) = 0 ] 
		フィールド内容の再ルックアップ [ ダイアログあり: オフ ; 社員テーブル::社員番号 ] 
	End If
End If
ウインドウを閉じる [ 現在のウインドウ ] 

https://www.dropbox.com/s/b20vy6pd321zt … 2.zip?dl=0

実際の1社員1レコードのテーブルとしては、管理テーブルを使えばいいでしょう。

Last edited by Shin (2022-07-22 13:51:09)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 596.77 KiB (Peak: 613.68 KiB) ]