- ベストアンサー
Access2002のリレーションについて。
販売管理のデータベースを作成しています。 『販売店マスターテーブル』 販売店コード(主キー) 販売店名 郵便番号 住所 電話番号 営業担当者コード 『営業担当者テーブル』 営業担当者コード(主キー) 営業担当者名 『販売伝票テーブル』 伝票番号(主キー) 売上日 販売店コード この中で、『販売店マスターテーブル』から、販売店コード,販売店名,郵便番号,住所,電話番号,営業担当者コードを、 『営業担当者テーブル』から、営業担当者名を使って、新しいクエリを作成しました。 そのクエリを基にフォームを作成しましたが、フォームに新規レコードを入力できません。 念のため、販売店コードを『販売伝票テーブル』からとってきたら、新規レコードが入力できるようになりました。 これは、何か主キーの関係で入力できないんでしょうか。 もし、『販売伝票テーブル』から販売店コードをとらなくちゃいけないとしたら、それはナゼでしょうか・・。 初歩的なことで申し訳ありませんが、とても困っています。 どなたかお分かりになる方、教えて下さい。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>営業担当者コードは表示したいので、キー列を表示しない」のチェックを外してあ >ります コンボボックスを開くと [営業担当者コード][営業担当者名]の2列が表示される 状態ですね。 簡単な方法は2つあります。 そのコンボボックスをコンボ1 担当者の名前を表示したいテクストボックスをテキ スト1とすると 1.コンボボックスの表示から持ってくる コンボ1のプロパティを開きイベントの更新後処理にコードビルダで Private Sub コンボ1_AfterUpdate() テキスト1 = コンボ1.Column(1) End Sub と記述すればテクスト1にデータを取り込めます。 2.クエリから取り込む フォームの元になるクエリに『営業担当者テーブル』を追加してあれば営業担当者名 をクエリのフィールドに追加してテクスト1のプロパティのコントロールソースに 営業担当者名を設定すれば良いと思います。 Lookupとか使うやりかたも有りますが上記でOKではないでしょうかLookupなどは ご自分で勉強してみてください。頑張ってくだい。
その他の回答 (4)
- kuronekozizi
- ベストアンサー率42% (25/59)
コンボボックスには コントロールソース→営業担当者コード 値集合タイプ→テーブル/クエリ 値集合ソース→営業担当者テーブル 列数→2 列幅→0cm;5cm(担当者名の文字数によって微調整) 連結列→1 でどうですか?
お礼
ありがとございました。 詳しく教えていただいて感謝感謝です。
- O_cyan
- ベストアンサー率59% (745/1260)
>『販売店マスターテーブル』から、販売店コード,販売店名,郵便番号,住所,電話番 >号,営業担当者コードを『営業担当者テーブル』から、営業担当者名を使って、新 >しいクエリを作成しました。そのクエリを基にフォームを作成しましたが、フォー >ムに新規レコードを入力できません これは販売店マスタにレコードを入力するフォームですよね。このフォームの クエリに販売伝票テーブルから販売店コードを持ってくるのは構築上おかしい ですよね。 リレーションは『営業担当者テーブル』営業担当者コードと『販売店マスターテー ブル』営業担当者コード が1対多のリレーションで繋がり『販売店マスターテーブ ル』販売店コードと『販売伝票テーブル』販売店コード が1対多で繋がっている リレーションだと思いますが >『営業担当者テーブル』から営業担当者名を使って新しいクエリを作成しました これは営業担当者コードの誤りではないですか? 『営業担当者テーブル』に担当者全て入力されているとすればこのフォームで 『営業担当者テーブル』にはレコードを追加できない仕様です。 営業担当者コードは主キーになっていて重複しない設定になっているはずです。 『営業担当者テーブル』からは営業担当者コードのみ『販売店マスターテーブル』 に書き込みに行き(営業担当者名フィールドがないので)営業担当者名は非連結の フィールドを作り表示だけにする様にすれば大丈夫だと思います。
お礼
ありがとうございました。 O_cyanさんの言うとおり、「営業担当者コード」を『販売店マスターテーブル』から持ってきたら、データが入力できました。 そこで、「営業担当者コード」をコンボボックスにして、『営業担当者テーブル』の、「営業担当者コード」と「営業担当者名」を表示するように、コンボボックスを作成しましたが、その下に作った、非連結のテキストボックスに、コンボボックスの2列目の「営業担当者」を参照させるにはどうしたらいいんでしょうか。 営業担当者コードは表示したいので、キー列を表示しない」のチェックを外してあります。 もしお分かりになったら教えていただきたいのですが・・。 こんな初歩的なことを伺ってごめんなさい。
- kuronekozizi
- ベストアンサー率42% (25/59)
多分問題は、営業担当者テーブルから持ってきた 営業担当者名です。 営業担当者テーブルの担当者コードのデータ型は何になっていますか? もし数値型やテキスト型なら、そのフォームにデータを入れると、 営業担当者テーブルの主キーである、「営業担当者コード」にデータが入りませんよね? 主キーは基本的に空白にすることはできないので 担当者テーブルの担当者コードをオートナンバーにするか、 担当者テーブルにデータを入力してから コンボボックスなどで選択するスタイルにしてはどうでしょう?
お礼
ありがとうございました。 やっぱり「営業担当者コード」と「営業担当者名」が問題みたいです。 今は、コンボボックスの値を、非連結のテキストボックスに参照させる操作で止まっています・・(T_T) なぜ「キー列に表示しない」が推奨なんでしょう・・。 Accessは難しいですね・・。もうわけが分かりません(T_T)
販売店マスターテーブルの販売店コードというのは、主キーに設定されているものですよね。 これは(主キーというのは)、重複することのないデータです。つまり 1 A商店 2 B商店とつけていくものですよね。1 C商店とつけることはできません。(重複するから) この場合の、販売店コードは、1は何なにで2が何なにだということを指定するためのものです。 その点 販売伝票テーブルの販売店コードは主キーには設定されていません。 つまり、販売店の名前を入力する代わりに販売店コードを入力するわけですよね。 ですから、販売伝票テーブルから販売店コードを持ってくるわけです。 うまく説明できなくてすみません。
お礼
さっそくの回答、ありがとうございました。 kake_angelさんの方法で作ってみたら、「販売店コード」は入力できるようになりましたが、それ以降はやっぱり入力できませんでした。 でも、早く答えていただいて嬉しかったです。 ありがとうございました。
お礼
ありがとうございました。 本当に本当に助かりました。 O_cyanさんのおかげで、リレーションの大切さを少しは分かった気がします。 コンボボックスのデータを参照するコードビルダも、何もかもすべて勉強になりました。アクセスは難しくて苦手ですが、これからも勉強してがんばります。