Hatenaさまいつもお世話になっています。
2016頃によく質問をさせていただき、社内で5名程度が記録を行う
老人介護システムを作成管理しています。
今回は、このシステムに新たなフォームを追加して管理したいと思って製作に取り組んでいます。
クエリを2つ作成し管理しようと思っていましたが、構築の段階でつまってしまいました。
下記の内容をフォームで表示する方法を教えていただけたらと思います。
流れ:ケアプラン:お客様をどう介護していくのか計画するケアプランの書式を半年の期日で作成します。期日が来ると新たにプランを作成します。急な変更で期日前に新たに作成することもあります。
モニタリング:お客様の様子を毎月、ひと月全体を通じてどのような様子だったか記録します。ケアプラン書式の作成日にもとづいて3か月に1度評価を記録します。
今回、モニタリングのフォームでケアプランで作成された作成日を元に3か月目を抽出し、フォームで3か月目に記録を記入できる表示/非表示をテキストボックスに反映させたいと思っています。
ケアプランの作成日を元に追加クエリでモニタリングに評価日を挿入すればできるのではと考えているのですがうまくいきません。久しぶりの取り組みで抜け落ちも多そうです。
ぜひ、ご教授いただけたらと思います。
T_フェイスシート
お客様ID 主キー
その他情報…
T_ケアプラン
プランID
計画No 主キー
お客様ID 主キー
計画内容
計画日 日付型
計画期間終 日付型
その他情報…
T_モニタリング
モニタリングID
お客様ID 主キー
計画月 主キー 日付
評価日 日付型
その他の情報フィールド
ファイルを送信します。
管理者追加
送信いただいたファイルです。
システム試行中R2.8.22.zip
モニタリングとケアプランの関係性がよくわかりませんね
少し乱暴ですがテーブルを分けずに「T_ケアプラン」に「モニタリング評価1」、「モニタリング評価2」、「その他情報フィールド」をつけてしまえば解決するのでは?
テーブルを分ける必要があるのなら「T_モニタリング」に「ケアプランID」を設けて関係性を持たせれば楽ができると思います
未記入のフィールドにデータを書き込むなら更新クエリです。それともケアプランを作成したときに自動的に「T_モニタリング」にデータを追加したい(6か月分)という内容でしょうか?
ありがとうございます。説明足らずですみません。
やはりテーブル一つで組むのがよいのでしょうか…
モニタリングというのは毎月報告していく書式ですのでお客様の様子を日付と内容を挿入し毎月更新します。
ケアプランは初回から6か月おきに作る書式です。関連性は、ケアプランで作成した計画が3か月目で毎月行うモニタリングを元に評価する。という点だけです。ただ、毎月行うモニタリングの書式のフォームに評価をする項目も盛り込みたいと考えています。(記録者にわかりやすくしたい為です)
テーブルを一つにまとめて挑戦もしていますが、構成がいまいち頭に描けず混乱しています。
テーブル一つで組めば楽だと思いますが
『「評価」は2か月に1度にしよう』とか業務内容変更の可能性なんかを考えるとテーブル1つにしちゃったら発狂間違いなしですねぇ
もう一つ例を挙げているように「T_モニタリング」に「ケアプランID」を設けてあげればクエリで簡単にモニタリングの計画月に対応するケアプランの計画日が拾えるので日付の比較で3か月目かどうかが簡単に計算できます。「評価日」も簡単に計算できるのでフィールドに持つ必要もなさそうです
質問のように対応する「ケアプランID」が不明の状態だと、自前で対応するケアプランの計画日を探すという計算式を組むことになります。結構めんどくさいです
「関係性がよくわからない」とはこの部分のことで、それぞれのテーブルに日付のデータが入っているので頑張れば関係性を見つけることはできそうですが、そんな頑張りせずにIDで紐づけできないか?という話です
「T_モニタリング」に「ケアプランID」を設けて、メインフォーム(T_ケアプラン)、サブフォーム(T_モニタリング)としてプランIDとケアプランIDをリンクさせ、よくあるメイン-サブフォーム形式で組めば難しいものでもないのではないでしょうか
ご連絡ありがとうございます。
「T_モニタリング」に「ケアプランID」を設ける形で再度挑戦してみようと思います。
毎月、記録するT_モニタリングと、計画をするT_ケアプランは記録をする担当者が違う為、ケアプランが期日を過ぎてもモニタリングは毎月可動するように考えています。(過ぎている場合警告を出す予定で)
毎月のモニタリングはお客様数が50名を超えるのでできれば表形式を使いたいと思っています。
クエリの組立が勉強不足なのだと痛感しました。hirotonさんありがとうございます。
リレーション組めれば楽なのにってパターンですね。あるあるです。が、データベース的にはあまり考えたくない特殊な条件なので質問時点で記載があるとよかったかなぁと思います
この条件だと、最後に提示したメイン-サブフォーム形式は使えないので「T_モニタリング(ケアプランID)」と「T_ケアプラン(プランID)」で(想定とは逆向きの)一対多でクエリを組んで計画日を拾うためだけの形で運用します
ケアプランIDは計算で求めることになる(求められる)のでフィールドに持つ必要はないともいえるのですが、結構複雑な処理になるので必要なタイミングで取得したらデータとして保存する(「ケアプランID」フィールドを設ける)というのがやはり扱いやすいと思います
質問では評価記入の基準のために「評価日」を設ければいいのではないか?としていますが、ケアプランIDがあればその計算は簡単なのと、ケアプラン側から評価の一覧を見たいとなった場合、ケアプランIDでモニタリングのデータが抽出できる等のメリットもあります
こうすると問題点が2つ上がってきます
1.どのタイミングでケアプランIDを取得するか、その求め方
求め方については、モニタリングの計画日がケアプランの計画期間内になるようなケアプランIDを拾えばいいので次のような式で求められます
「計画期間終」の入力が実際のプラン終了時(それまでは未入力)なんて場合は
Nz([計画期間終], DataAdd("m", 6, [計画日])-1)
等、手入れが必要になると思いますタイミングは、まず、モニタリングのデータ入力時に「計画月」を入力したタイミングで更新後処理イベントを使って
これで、ケアプランが存在しない場合はNullチェックで警告が出せますね
もう一つは、モニタリング入力時にケアプランが存在しなかったデータについて「後から入力する」ことですが、これはケアプラン入力時に更新クエリを発行すればいいでしょう
2.ケアプランIDがない場合、「評価」の入力可否をどのように決めるか
ケアプランIDがある場合は、
DateDiff("m", [計画日], [計画月])
で何か月目なのかが判断できますない(nullの)場合は、「ケアプランが不明です」として入力不可にしてしまうか、推定3か月目等、それでも入力すべきタイミングを計算するかを考える必要があります。後者の場合は、ケアプランの最後のデータを拾ってきて仮の計画日として計算させる形になります