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

解決済みの質問

(アクセス)コンボボックスの選択結果をレコードに

MSオフィスのAccessについて質問です。

二つのテーブルがあるとします
--------
<T業種>
業態    業種  コード(オートナンバー)
A業態   a業   1
A業態   b業   2
A業態   c業   3
B業態   d業   4
B業態   e業   5
--------
<T企業>
社名 コード
A社  1
B社  1
C社  2
--------

(目的)
フォーム上に<T企業>を参照するコンボボックスを二つ作り、
業態を選ぶと業種が選べるようにする。
そして、選んだ組み合わせのコードを<T企業>に入れ、
レコード移動したらコンボボックス内の業態業種も変わるようにしていく。

(質問内容)
現在、コンボボックスで業態を選ぶと業種が選べるようにはなっています。
しかしながら、コンボボックスで選んだコードが<T企業>に反映されません。
選択肢を変えても<T企業>のコードナンバーが変わらず、
手動でナンバーを変えてもA社、B社、C社のコンボボックスの内容が変化しません。

(環境)
Access2000

ソフトが古く環境面からお答えしにくいかもしれません。急遽データベースを作ることになり、とりあえず社内で眠っていたソフトを活用し、今後活用できそうならアップグレードするという予定になっております。
私自身も最近Accessの勉強を始めたばかりで深くは理解しておりません。

どうかご教示よろしくお願いします

投稿日時 - 2013-02-18 13:46:09

QNo.7951642

困ってます

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

途中から失礼します。
MDBの状態が質問開始時の状態だとして。
業態を選ぶコンボボックスを、コンボ1
業種を選ぶコンボボックスを、コンボ2
とした場合です。

コンボ1の
値集合ソースに、
SELECT DISTINCT 業態 FROM T業態;
値集合タイプに テーブル/クエリ
連結列は 1

コンボ2の
値集合ソースには、
SELECT [コード], 業種 FROM T業態 WHERE 業態=[コンボ1];
値集合タイプに テーブル/クエリ
連結列は 1

次にイベントタブに移って
コンボ1の
更新後処理に
Private Sub コンボ1_AfterUpdate()
Me!コンボ2.Requery
End Sub

コンボ2には
Private Sub コンボ2_AfterUpdate()
Me!コード = Me!コンボ2
End Sub

とします。
コンボ1・2 とも入力用に非連結コントロールになりますので
全てのレコードで同一ですが、T企業のコードの値は保持されます。
要はコンボボックスは入力用と割り切るのが肝心。

企業の業態と業種もフォーム上に表示したいなら
クエリを一個作成して、SQLビューでは↓
SELECT T企業.ID, T企業.社名, T企業.[コード], T業態.業態, T業態.業種
FROM T企業 INNER JOIN T業態 ON T企業.[コード] = T業態.[コード];
このクエリをフォームのレコードソースとすれば宜しいかと。

投稿日時 - 2013-02-20 12:15:12

補足

nicotinismさん
ありがとうございます。

実は回答頂いた時間前後に目的とするものが出来上がりました。^^
(表示切り替え、業種絞り込み)

しかしながら、まだまだ解らないことが多々ありますので、今後もよろしくお願い致します

ありがとうございした

投稿日時 - 2013-02-20 16:00:22

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

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

回答(4)

ANo.3

お早うございます。
リレーションシップの設定は出来ましたか

T_業種の業態IDのルックアップ設定です

T_業種をデザインビューで開き
[業態ID]→[ルックアップ]→[コンボボックス]
と進み次のように添付のようにプロパティーを変更します
・値集合ソース 右端クリックして「T_業態」選ぶ
・連結列 1…T_業態のIDが一番目のフィールド
・列数  2…「ID」と「業態名」の2つ
・列幅  0…各フィールドの表示幅(Cm)
       IDは非表示、最後のフィールド幅は省略
・リスト行数 …任意ですが参照項目数がこれを超えると
       スクロールバーが表示されます
同じ要領でT_企業の業種IDにもT_業種へのルックアップ設定します

>>コンボボックスで選んだコードが<T企業>に反映されません。

もうお分かりですね
ご質問の「T企業」の中に「業種ID」または「業種名」を追加する意味

以上設定するとテーブルを開くと「業種ID」は数値形式なのに
社名で検索、表示できます。

投稿日時 - 2013-02-19 09:36:33

補足

お答えいただきありがとうございます。

ご説明頂いた通りにやってみましたが上手くいきません・・。
下記の事でつまづいています。

1)リレーションのT業種が1対多になりません。
”主テーブルで参照されているフィールド用の固有インデックスがみつかりません”と出てきます。

2)T業態のルックアップ設定ができません。T業種のIDはルックアップ設定のみできました。

3)とりあえず、フォームに二つのコンボボックスを作りリスト表示できることは確認出来ましたが、会社名のレコード移動をしてもコンボボックスの中身が変わりません。

なにか見落としているのでしょうか?

それから、この方法についてもう1点伺いたいのですが、
質問前に作成していたT業種はグループ化して業態名の中から業種名を絞りこめれるようになっているのですが、今回ご説明頂いたテーブルの作成方法で、同じように絞り込むことが可能でしょうか?

よろしくお願いいたします

投稿日時 - 2013-02-19 12:00:30

ANo.2

accessはリレーショナルデーターベースの一つです
この特徴を利用します。

T業種をT_業種とT_業態とに分解しT_業種にT_業態に
リレーションシップを設定するためT_業態の主キーに
対応するフィールドを追加します。
結果次の3つのテーブル設計になります。

T_業態
・ID オートナンバー 主キー
・業態名

T_業種
・ID オートナンバー 主キー
・業種名
・業態ID 数値 長整数型

T_企業
・ID オートナンバー 主キー
・社名
・コード A社 B社が同値ですがよいのですか
・業種ID 数値 長整数型

このテーブルに添付のようなリレーションシップを定義することで
企業には業種IDを登録すると業態はついてきます

コンボボックスですがテーブル設計でルックアップ設定します

ルックアップ設定の説明は1日程度時間下さい

投稿日時 - 2013-02-19 00:25:00

ANo.1

<T企業>のコンボボックスのリスティング内容が変われば良いだけであれば
<T企業>の値集合ソースに「SQL文」を入れます。

SELECT 社名,コード FROM T企業 WHERE コード=[T業種]

のような感じで。

投稿日時 - 2013-02-18 15:00:14

あなたにオススメの質問