こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access2002のリレーションについて。

販売管理のデータベースを作成しています。

『販売店マスターテーブル』
販売店コード(主キー)
販売店名
郵便番号
住所
電話番号
営業担当者コード

『営業担当者テーブル』
営業担当者コード(主キー)
営業担当者名

『販売伝票テーブル』
伝票番号(主キー)
売上日
販売店コード

この中で、『販売店マスターテーブル』から、販売店コード,販売店名,郵便番号,住所,電話番号,営業担当者コードを、
『営業担当者テーブル』から、営業担当者名を使って、新しいクエリを作成しました。
そのクエリを基にフォームを作成しましたが、フォームに新規レコードを入力できません。
念のため、販売店コードを『販売伝票テーブル』からとってきたら、新規レコードが入力できるようになりました。
これは、何か主キーの関係で入力できないんでしょうか。
もし、『販売伝票テーブル』から販売店コードをとらなくちゃいけないとしたら、それはナゼでしょうか・・。

初歩的なことで申し訳ありませんが、とても困っています。
どなたかお分かりになる方、教えて下さい。
よろしくお願いします。

投稿日時 - 2002-09-12 21:15:09

QNo.357150

すぐに回答ほしいです

質問者が選んだベストアンサー

>営業担当者コードは表示したいので、キー列を表示しない」のチェックを外してあ
>ります
コンボボックスを開くと [営業担当者コード][営業担当者名]の2列が表示される
状態ですね。
簡単な方法は2つあります。
そのコンボボックスをコンボ1 担当者の名前を表示したいテクストボックスをテキ
スト1とすると
1.コンボボックスの表示から持ってくる
コンボ1のプロパティを開きイベントの更新後処理にコードビルダで

Private Sub コンボ1_AfterUpdate()
   テキスト1 = コンボ1.Column(1)
End Sub
と記述すればテクスト1にデータを取り込めます。

2.クエリから取り込む
フォームの元になるクエリに『営業担当者テーブル』を追加してあれば営業担当者名
をクエリのフィールドに追加してテクスト1のプロパティのコントロールソースに
営業担当者名を設定すれば良いと思います。

Lookupとか使うやりかたも有りますが上記でOKではないでしょうかLookupなどは
ご自分で勉強してみてください。頑張ってくだい。

投稿日時 - 2002-09-13 19:20:24

お礼

ありがとうございました。
本当に本当に助かりました。
O_cyanさんのおかげで、リレーションの大切さを少しは分かった気がします。
コンボボックスのデータを参照するコードビルダも、何もかもすべて勉強になりました。アクセスは難しくて苦手ですが、これからも勉強してがんばります。

投稿日時 - 2002-09-14 18:16:45

ANo.5

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

コンボボックスには

コントロールソース→営業担当者コード
値集合タイプ→テーブル/クエリ
値集合ソース→営業担当者テーブル
列数→2
列幅→0cm;5cm(担当者名の文字数によって微調整)
連結列→1

でどうですか?

投稿日時 - 2002-09-13 19:10:42

お礼

ありがとございました。
詳しく教えていただいて感謝感謝です。

投稿日時 - 2002-09-14 18:14:10

ANo.3

>『販売店マスターテーブル』から、販売店コード,販売店名,郵便番号,住所,電話番
>号,営業担当者コードを『営業担当者テーブル』から、営業担当者名を使って、新
>しいクエリを作成しました。そのクエリを基にフォームを作成しましたが、フォー
>ムに新規レコードを入力できません

これは販売店マスタにレコードを入力するフォームですよね。このフォームの
クエリに販売伝票テーブルから販売店コードを持ってくるのは構築上おかしい
ですよね。
リレーションは『営業担当者テーブル』営業担当者コードと『販売店マスターテー
ブル』営業担当者コード が1対多のリレーションで繋がり『販売店マスターテーブ
ル』販売店コードと『販売伝票テーブル』販売店コード が1対多で繋がっている
リレーションだと思いますが

>『営業担当者テーブル』から営業担当者名を使って新しいクエリを作成しました

これは営業担当者コードの誤りではないですか?
『営業担当者テーブル』に担当者全て入力されているとすればこのフォームで
『営業担当者テーブル』にはレコードを追加できない仕様です。
営業担当者コードは主キーになっていて重複しない設定になっているはずです。
『営業担当者テーブル』からは営業担当者コードのみ『販売店マスターテーブル』
に書き込みに行き(営業担当者名フィールドがないので)営業担当者名は非連結の
フィールドを作り表示だけにする様にすれば大丈夫だと思います。

投稿日時 - 2002-09-13 10:19:14

お礼

ありがとうございました。

O_cyanさんの言うとおり、「営業担当者コード」を『販売店マスターテーブル』から持ってきたら、データが入力できました。

そこで、「営業担当者コード」をコンボボックスにして、『営業担当者テーブル』の、「営業担当者コード」と「営業担当者名」を表示するように、コンボボックスを作成しましたが、その下に作った、非連結のテキストボックスに、コンボボックスの2列目の「営業担当者」を参照させるにはどうしたらいいんでしょうか。

営業担当者コードは表示したいので、キー列を表示しない」のチェックを外してあります。
もしお分かりになったら教えていただきたいのですが・・。
こんな初歩的なことを伺ってごめんなさい。

投稿日時 - 2002-09-13 15:46:59

ANo.2

多分問題は、営業担当者テーブルから持ってきた
営業担当者名です。
営業担当者テーブルの担当者コードのデータ型は何になっていますか?
もし数値型やテキスト型なら、そのフォームにデータを入れると、
営業担当者テーブルの主キーである、「営業担当者コード」にデータが入りませんよね?

主キーは基本的に空白にすることはできないので
担当者テーブルの担当者コードをオートナンバーにするか、
担当者テーブルにデータを入力してから
コンボボックスなどで選択するスタイルにしてはどうでしょう?

投稿日時 - 2002-09-13 01:57:15

お礼

ありがとうございました。

やっぱり「営業担当者コード」と「営業担当者名」が問題みたいです。
今は、コンボボックスの値を、非連結のテキストボックスに参照させる操作で止まっています・・(T_T)
なぜ「キー列に表示しない」が推奨なんでしょう・・。
Accessは難しいですね・・。もうわけが分かりません(T_T)

投稿日時 - 2002-09-13 15:53:03

ANo.1

販売店マスターテーブルの販売店コードというのは、主キーに設定されているものですよね。
これは(主キーというのは)、重複することのないデータです。つまり 1 A商店 2 B商店とつけていくものですよね。1 C商店とつけることはできません。(重複するから)
この場合の、販売店コードは、1は何なにで2が何なにだということを指定するためのものです。

その点 販売伝票テーブルの販売店コードは主キーには設定されていません。
つまり、販売店の名前を入力する代わりに販売店コードを入力するわけですよね。

ですから、販売伝票テーブルから販売店コードを持ってくるわけです。

うまく説明できなくてすみません。

投稿日時 - 2002-09-12 22:03:33

お礼

さっそくの回答、ありがとうございました。

kake_angelさんの方法で作ってみたら、「販売店コード」は入力できるようになりましたが、それ以降はやっぱり入力できませんでした。
でも、早く答えていただいて嬉しかったです。
ありがとうございました。

投稿日時 - 2002-09-13 15:49:18

あなたにオススメの質問