- ベストアンサー
アクセスでのリレーションシップの設定方法を教えてください。
こんばんは。アクセス初心者です。フォームで入力して、テーブル、クエリですぐに反映させるにはどうしたらよいのでしょうか?私が今作成しようとしているデータベースは次のようなものです。 病院にて(1)患者マスター(患者IDと名前、年齢、性別など)のテーブル、クエリ、フォーム。(2)検査件数(患者ID、名前、年齢、検査材料、検査依頼日、発生した細菌など)のテーブル、クエリ、フォーム。 これらは作ったのですが、リレーションシップの仕方がよく解らないのでここから進めません。例えば、(2)検査件数のフォームで患者IDを入力したら自動的に名前、年齢、性別が入力されるようにしたいのですが。 よろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>患者マスター(患者IDと名前、年齢、性別など) >検査件数(患者ID、名前、年齢、検査材料、検査依頼日、発生した細菌など)のテーブル 患者マスタ:患者ID・氏名・生年月日・性別・住所・・など 検査テーブル:患者ID・検査日・検査依頼日・検査材料・発生細菌・・など データベースの正規化から言うとデータベースのテーブルにはキーやインデックス以外重複するフィールドは不要です。そのため氏名・年齢は検査テーブルには不要で患者IDがあれば患者マスタから氏名・生年月日を患者IDにより取得すれば良いということになります。 #1の方の回答にもありますが[年齢]は毎年更新する必要が出るため使用しません。年齢は生年月日から求めるようにします。検査時点での年齢も生年月日から検査日の時点の年齢を求めればいいので生年月日と検査日があれば不要です。 と言うことでこの二つのテーブル間は患者IDでのリレーションをすれば良いという事になります。 患者IDと検査テーブル間で1対多のリレーションを取ればOKです。 >フォームで入力してテーブルクエリですぐに反映させるにはどうしたらよいのでしょうか フォームで入力し次のレコードに移動したとかフォームを閉じた時点でテーブルに保存確定されます。その後はすぐ反映されます。 ただし開いているフォームやクエリ等にはそのままでは反映されないのでフォームやクエリをRequeryする必要があります。フォームを開きなおしたりクエリを開き直したりすれば同様になります。 >検査件数のフォームで患者IDを入力したら自動的に名前・年齢・性別・・ 簡単な方法は作ってある検査件数のフォームのプロパティを開きレコードソースに検査件数テーブルが設定されていると思いますがその右にある...のボタンをクリックしSQLステートメントを開きテーブルの表示で患者マスタを選びテーブル追加します。リレーションを取っていれば自動で結合線が表示されます。 患者マスタの名前・生年月日・性別等の必要なフィールドをクエリ上のフィールドにドラッグして追加します。 フォーム上の名前・生年月日・性別等のテキストボックス等のプロパティでコントロールソースに各フィールドを設定すれば患者IDを入力すればフォーム上の名前等の各コントロールに患者マスタの値が表示されます。 または リレーションを取り検査テーブルと患者マスタを元にフォームを作ればできます。 >年齢(蛇足ですが) 生年月日から今日(Date())の年齢を求める記述は =Int((IIf(DatePart("d",[生年月日])>DatePart("d",Date()),DateDiff("m",[生年月日],Date())-1,DateDiff("m",[生年月日],Date()))/12)) & "歳" クエリにでもコントロールでも上記をコピーで満年齢を取得できます。
その他の回答 (4)
- O_cyan
- ベストアンサー率59% (745/1260)
>レコードソースの出し方を教えてください #4の方が回答してありますが フォームをデザインビューで開たままの状態でメニューの表示からプロパティを開けばフォームというプロパティが開けます。 またはフォームをデザインビューで開き左上の角の四角い部分を右クリックでプロパティを開けばフォーム自体のプロパティが開けます。データのタブでレコードソースがあります。
お礼
ありがとうございました。初歩的なことですみませんでした。またよろしくお願いします。
- GreatDragon
- ベストアンサー率46% (186/402)
こんにちは。 > レコードソースの出し方を教えてください。 該当フォームのデザインビューで、左上の小さなボックス(水平ルーラと垂直ルーラが交差しているボックス)またはデザインビューのウインドウ内の何も無いところ(濃いグレーの部分)を、ダブルクリックするまたはその部分を右ボタンでクリックしショートカットメニューからプロパティを選択すると良いです。 コントロールソースが表示されてしまうのは、コントロールが選択されている状態でプロパティウインドウを表示しているからです。 がんばってくださいね。
お礼
ありがとうございました。初歩的なことで申し訳ありませんでした。またよろしくお願いします。
<患者マスター> ID(主キー) 名前 読み 生年月日 性別 他 <検査件数> ID(主キー) 患者_ID 検査材料 検査依頼日 他 リレーションシップ <患者マスター.ID><==><検査件数.患者_ID> <<<テーブルの設計段階で随分と仕組めます>>> ********************* 例1:[名前]を入力したら[読み]を自動で生成する。 ********************* [名前]のフィールドプロパティ[ふりがな]で[読み]を指定する。 ********************* 例2:生年月日を 2002年2月11日と表示させる。 ********************* [生年月日]の書式で'日付(L)'を指定する。 ************************ 例3:[性別] をコンボボックスで選択するようにする設定。 ************************ M | 男性 F|女性 と、クエリーやフォームで表示するようにするには、 [性別]のフィールドプロパティで次のように設定します。 フィールドサイズ=1 規定値="M" 表示コントロール=コンボボックス 値集合タイプ=値リスト 値集合ソース=M;男性;F;女性 列幅=1cm;1.5cm ************************* 例4:[検査件数].[患者_ID]で、名前・生年月日・性別を表示 ************************* [検査件数].[患者_ID]のフィールドプロパティで 表示コントロール=コンボボックス 値集合タイプ=テーブル/クエリ 値集合ソース=SELECT 患者マスター.ID, 患者マスター.名前, 患者マスター.生年月日, 患者マスター.性別, * FROM 患者マスター; 列数=4 列幅=1cm;3cm;3cm;1cm ※これで、ただ、[検査件数]テーブルを開くだけで、[患者_ID]列に、患者マスター.ID, 患者マスター.名前, 患者マスター.生年月日, 患者マスター.性別が表示されます。
お礼
ありがとうございました。お礼が大変遅くなりましたがやっと解決できました。本当にありがとうございました。
- GreatDragon
- ベストアンサー率46% (186/402)
回答ではなくアドバイスです。 最初にテーブルの見直しをオススメします。 テーブルがしっかり設計されていないとリレーションシップの意味がありませんので・・・ 私の独断・偏見の(例)です。 ■テーブル(患者マスター) 患者ID 名前 生年月日(来年になっても更新のし直しが不要なので、年齢より生年月日のほうが良い。) 性別 他 ■テーブル(検査件数) 患者ID 検査材料 検査依頼日 発生した細菌 他 ※こちらのテーブルでは、名前、年齢は必要ありません。 ■クエリ(適切な名称) 患者ID(検査件数テーブル) 名前 生年月日 年齢(クエリで計算) 性別 検査材料 検査依頼日 発生した細菌 上記のクエリを基にしてフォームを作成してみてください。 患者IDの入力で、名前・生年月日・年齢・性別など表示されるはずです。 ※意識的なリレーションシップを設定していないことに着目してください。
補足
大変遅くなりまして申し訳ないのですが、「検査件数フォームのプロパティを開きレコードソース...」とありますが、コントロールソースしか見当たりません。レコードソースの出し方を教えてください。大変初歩的ですみませんが、混乱してますのでよろしくお願いします。。。