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

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

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

You are not logged in.

Announcement

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


#1 2014-07-01 14:37:11

tama74
Guest

リレーションで自動入力した値での年齢計算

はじめまして。

環境は Dynabook WIN Vista
FileMaker pro5.5  を使用しています。

病院で患者さんの管理をするのに使用しているのですが、わからないことがあり質問させていただきました。


今まで、生年月日を手入力すると年齢を自動計算して表示するように設定していました。
(計算コードは If(Dayofyear(生年月日)<=Dayofyear(検査日),Year(検査日)-Year(生年月日),Year(検査日)-Year(生年月日)-1) です)

今回、リレーションでIDを入力すると、以前に入力したことがあるデータの氏名・性別・生年月日を自動的に入力されるように設定しました。

ところが、そこで困ったことになり、にっちもさっちもいきません。

①新たなIDに対しては手入力で氏名・性別・生年月日を入力したいのですが、入力ができません。
(ID入力後、一度別のレコードを表示させてから戻すと入力は出来るのですが…)

②生年月日が自動入力されたものに対して、年齢を計算してくれなくなりました。
どうすれば計算されるようになるのでしょうか?

初心者で、まったくわからず、、、、
皆様からご教授いただけるとありがたいです。
よろしくお願いいたします。

#2 2014-07-01 16:09:26

チポ
Member

Re: リレーションで自動入力した値での年齢計算

ファイルの構造が理解できていませんが、、


①新たなIDに対しては手入力で氏名・性別・生年月日を入力したいのですが、入力ができません

そのフィールドは、リレーション先の参照フィールドでは?

確認方法は、
レイアウトモードでそのフィールドのダブルクリックで何者か確認できますよ。

②生年月日が自動入力されたものに対して、年齢を計算してくれなくなりました

全く説明不足です。

たとえば、「検査日」は入力されていますか?


計算コードは If(Dayofyear(生年月日)<=Dayofyear(検査日),Year(検査日)-Year(生年月日),Year(検査日)-Year(生年月日)-1) です

これでは正しい年齢計算をしてくれませんよ。

Offline

#3 2014-07-02 07:57:46

tama74
Guest

Re: リレーションで自動入力した値での年齢計算

チポさま

ご回答、ありがとうございます。
説明不足が多く、申し訳ありません。

患者の検査履歴を保存するためのファイルを作っており、
登録する内容は
検査日・ID・氏名・性別・生年月日・年齢・検査内容 です。

今まで、検査日と生年月日を元にその日の年齢を計算し表示させていました。

今回、同じファイルのID同士をリレーションで紐付けて
検査日・IDを入力すると以前入力したデータの氏名・性別・生年月日・検査内容が表示されるように設定したものです。



>そのフィールドは、リレーション先の参照フィールドでは?

>確認方法は、
>レイアウトモードでそのフィールドのダブルクリックで何者か確認できますよ。

早速確認したところ、リレーション先の参照フィールドになっていました。
リレーション先のフィールドに設定することで以前入力したものが自動で反映される仕組みになっていると認識していました。
その状態になっていると、そのフィールドに直接入力することは不可なのでしょうか?
IDで引っ張ってこれなかったもの(新規患者など)に対して、そのまま氏名欄に直接入力したいのですが、そういったことは可能でしょうか?
できる方法があれば教えていただけるとありがたいです。。。


>②生年月日が自動入力されたものに対して、年齢を計算してくれなくなりました

>たとえば、「検査日」は入力されていますか?

>計算コードは If(Dayofyear(生年月日)<=Dayofyear(検査日),Year(検査日)-Year(生年月日),Year(検査日)-Year(生年月日)-1) です

>これでは正しい年齢計算をしてくれませんよ。

検査日と生年月日を入力することで、上の計算式を用いて今まで年齢計算は出来ていました。
今も、新規患者に対しては入力すれば計算できるのですが、リレーションで自動入力された生年月日に対しては検査日を入力しても年齢計算をしてくれません。
自動入力したもは日付として認識されないために計算できないのでしょうか?
他に計算させる方法があれば教えていただけるととてもありがたいです。

わかりにくい説明ですみません、何卒よろしくお願いします。

#4 2014-07-02 10:07:13

チポ
Member

Re: リレーションで自動入力した値での年齢計算

リレーション先の参照フィールドになっていました。
リレーション先のフィールドに設定することで以前入力したものが自動で反映される仕組みになっていると認識していました。
その状態になっていると、そのフィールドに直接入力することは不可なのでしょうか

ID入力後、空クリックなどでレコード確定すれば入力できます。

参照フィールドでなくても、ルックアップ等で自動入力することもできますよ。


計算コードは If(Dayofyear(生年月日)<=Dayofyear(検査日),Year(検査日)-Year(生年月日),Year(検査日)-Year(生年月日)-1) です

ごめんなさい、この式でいいですね。
私の全くの勘違いです-_-

しかし、
現状の参照フィールドの配置だと、照合1番以外のレコードには生年月日に入力されていませんから、
それらのレコードは計算されませんね。

生年月日
を参照フィールドの
::生年月日
に変更すれば計算されるでしょう。

そうすると索引非保存になりますので、
レコード数が多くなると検索、ソート等もたつくことが有りますよ。

それらをふまえて、
参照フィールドの配置にするか、ルックアップ等にするか考えた方がいいでしょう。

Last edited by チポ (2014-07-02 10:33:13)

Offline

#5 2014-07-02 10:24:27

tim
Guest

Re: リレーションで自動入力した値での年齢計算

>これでは正しい年齢計算をしてくれませんよ。
うるう年がからむと1日ずれますよね。
2012/3/1生まれは2013/3/1に0歳になる

#6 2014-07-03 09:12:39

tama74
Guest

Re: リレーションで自動入力した値での年齢計算

チポさま

わかりやすいご説明、ありがとうございます。
ルックアップで作り直したところ、うまく作動しました。

おかげさまで、作業効率がぐんとあがりました。
ありがとうございました<m(_ _)m>

#7 2014-07-03 09:15:06

tama74
Guest

Re: リレーションで自動入力した値での年齢計算

timさま

たしかに、この式だとうるう年対応できないですね!
まったく気づいていなかったです、ご指摘ありがとうございます。

・・・良い計算式などあればご教授いただけると幸いです(T_T)

#8 2014-07-03 11:39:08

チポ
Member

Re: リレーションで自動入力した値での年齢計算

わたくしも忘れていましたよ;;

普通は
MMDD
の様な数値の大小比較で誕生日の前後の判定をしますね。

Offline

#9 2014-07-03 11:51:34

Shin
Member

Re: リレーションで自動入力した値での年齢計算

YY.MMDDを作って、引き算して、整数部分のみを取り出す、という式が単純かも。

上の式が好きなら、
If(Dayofyear(生年月日+306)<=Dayofyear(検査日+306),Year(検査日+306)-Year(生年月日+306),Year(検査日+306)-Year(生年月日+306)-1)
とすればおそらくいいはず。
(理屈は、考えてみて下さい)

Last edited by Shin (2014-07-07 14:47:32)

Offline

#10 2014-07-03 12:15:47

Hiro
Member

Re: リレーションで自動入力した値での年齢計算

古来年齢の定石式?
(Year(検査日)-Year(生年月日)) - (((Month(検査日)=Month(生年月日)) and (Day(検査日)<Day(生年月日))) or (Month(検査日)<Month(生年月日)))

Offline

#11 2014-07-04 13:41:43

tama74
Guest

Re: リレーションで自動入力した値での年齢計算

チポさま
Shinさま
Hiroさま

返信がおそくなってしまい、申し訳ありません。
みなさま、親切にお教えいただきありがとうございます。
早速、教えていただいた式で修正したいと思います。

ほんとうにありがとうございました。
また、何か困ったことがあれば質問させていただけると恐縮です。

#12 2014-07-04 15:15:20

Shin
Member

Re: リレーションで自動入力した値での年齢計算

今風の定式
Int ( Year(検査日) + Month(検査日) / 100 + Day(検査日) / 10000 - Year(生年月日)) - Month(生年月日) / 100 - Day(生年月日) / 10000 )

Offline

#13 2014-07-04 15:51:28

にしなな
Member

Re: リレーションで自動入力した値での年齢計算

横からすみません。
#9の式でも3/1生まれで2/29検査の場合にずれてしまうと思うので、年齢計算には#10か#12の式が良いと思います。

Offline

#14 2014-07-04 23:41:30

Shin
Member

Re: リレーションで自動入力した値での年齢計算

にしなな wrote:

#9の式でも3/1生まれで2/29検査の場合にずれてしまうと思うので、年齢計算には#10か#12の式が良いと思います。

その条件でも検証してありますが。
ずれている、という条件をお教えいただけませんか。

Offline

#15 2014-07-07 09:25:48

にしなな
Member

Re: リレーションで自動入力した値での年齢計算

Shinさん
win8のFM12AdとFM13Adで試したのですが、生年月日が閏年ではない年の3/1で検査日が閏年の2/29の場合のみずれるようです。(閏年の3/1生まれの場合は閏年の2/29が検査日でもずれません)
閏年ではない年の3/1生まれの人が閏年の2/29に検査の場合、2/29時点では誕生日前日なので「検査日の年-生まれ年-1」になるはずですが、
#9の式では2/28時点では「検査日の年-生まれ年-1」で、2/29から「検査日の年-生まれ年」になりました。

Offline

#16 2014-07-07 14:47:43

Shin
Member

Re: リレーションで自動入力した値での年齢計算

typミスしたようで。
If(Dayofyear(生年月日+306)<=Dayofyear(検査日+306),Year(検査日+306)-Year(生年月日+306),Year(検査日+306)-Year(生年月日+306)-1)
が正しい式です。

Last edited by Shin (2014-07-07 14:48:12)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 10 queries executed - Memory usage: 554.07 KiB (Peak: 574.61 KiB) ]