プロが教える店舗&オフィスのセキュリティ対策術

アクセスで設備の修理履歴を管理するデータベースを作成しています。

修理履歴テーブルがあり、その他、
実施区分、設備、修理タイプ、
処置区分、トラブルコードはそれぞれテーブルを作成し、
リレーションシップを組んでいます。

T_修理履歴
修理ID(オートナンバー)
発生日
実施区分ID
担当者
設備ID
作業時間
修理タイプID
処置区分ID
トラブルコードID

T_実施区分
実施区分ID  001   002
実施区分名  実施済 未実施

T_修理タイプ
修理タイプID  001  002
修理タイプ  突発  予防

他のテーブルも同様に作成しています。

修理依頼を受け、修理ID~設備IDまでを入力、
修理を実施した後、作業時間~トラブルコードまでを入力する形式を
取りたいのですが、作業時間から下が空白のままだと、
未実施データを抽出するクエリを作成しても、
データが表示されません。

リレーションシップに問題があるのでしょうか?

ご指導よろしくお願い致します。

 

A 回答 (2件)

こんにちは!



T_修理履歴とT_修理タイプは直積結合になっているのでしょうか?
その場合、T_修理タイプに存在しない修理タイプ(空白)のレコードは表示されないと思います。

デザイナーを使っている場合は
T_修理履歴とT_修理タイプを繋いでいる線を右クリックして
「結合プロパティ」を表示し、「「T_修理履歴」の全レコードと「T_修理タイプ」の同じ結合フィールドのレコードだけを含める」を選択してOKです。

もしくは単純に「未修理」というようなステータスを追加するのでも構わないと思います。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
無事に表示できました。
ありがとうございました。

お礼日時:2010/02/08 17:21

INNER JOIN だから


例えば、T_修理履歴から見て、T_修理タイプを
LEFT JOIN にしておけば、相手がいなくても
表示されます。
つまり、「INNER JOIN」とは両方とも存在して
いる場合という意味です。「LEFT JOIN」とは
左側に記述したテーブルが優先で、右側に記述
した方のテーブルのデータは存在しなくても良い
という意味です。
SQLビューにすると、以下のような感じです。

FROM T_修理履歴 LEFT JOIN T_修理タイプ
ON T_修理履歴.修理タイプID=T_修理タイプ.修理タイプID

クエリビルダで見ると、テーブルのフィールド間を
結ぶ線が直線になっていれば「INNER JOIN」です。
この線をダブルクリックして、結合条件を変更します。
T_修理履歴→T_修理タイプのように矢印になればOKです。

尚、一部DBシステムではNullという値からJOINすると、
エラーになるものもありますが、Accessは大丈夫です。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
勉強になりました。
ありがとうございました。

お礼日時:2010/02/08 17:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!