Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


284 / 2272 ツリー ←次へ | 前へ→

【12246】コンボボックス絞り込みで2つに所属する人がいる場合 初心 13/1/22(火) 0:53 質問[未読]
【12251】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/24(木) 2:34 回答[未読]
【12253】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/24(木) 17:08 発言[未読]
【12255】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/25(金) 2:28 回答[未読]
【12258】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/25(金) 23:48 発言[未読]
【12260】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/26(土) 1:35 回答[未読]
【12261】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/27(日) 0:16 発言[未読]
【12262】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/27(日) 2:03 回答[未読]
【12263】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/27(日) 23:36 発言[未読]
【12264】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/28(月) 1:57 回答[未読]
【12267】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/28(月) 23:51 発言[未読]
【12269】Re:コンボボックス絞り込みで2つに所属す... かるびの 13/1/29(火) 1:28 回答[未読]
【12273】Re:コンボボックス絞り込みで2つに所属す... 初心 13/1/31(木) 0:31 お礼[未読]

【12246】コンボボックス絞り込みで2つに所属する...
質問  初心 E-MAIL  - 13/1/22(火) 0:53 -

引用なし
パスワード
   いつもお世話になっております。
色々、調べてみたのですが、回答を見つける事が出来なかったため、何卒、御指導お願い申し上げます。

テーブル2つをIDでつなげて、フォーム上に絞り込みコンボボックスを作成致しました。
Bさんが所属Aにも所属Bにも該当するため、大項目コンボボックスで所属Aと所属Bを選択したときのどちらにも小項目コンボボックスにBさんを出現させるためにはどのようにすればよろしいのでしょうか?よろしくお願い致します。

大項目テーブル
所属A ID1
所属B ID2
所属C ID3
所属D ID4

小項目テーブル
Aさん ID1
Bさん ID1,2
Cさん ID2
Dさん ID4

【12251】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/24(木) 2:34 -

引用なし
パスワード
    小項目テーブルのBさんのID値を「1,2」のように入力したら、
データベースとしてまるで使い物にならなくなってしまいます。
 データベースでは、1セルにつき値は1つだけにします。
 このようにした状態を、第1正規形と言います。
 データベースでは、「テーブルを正規化しなければならない」とよく言われますが、
テーブルの正規化の第1歩目です。
 
 この観点からすると、
小項目コンボボックスのRowSourceとなるクエリ又はテーブルは、
   Aさん ID1
   Bさん ID1
   Bさん ID2 ←
   Cさん ID2
   Dさん ID4
という形になっている必要があります。

 ただ、小項目テーブルは、
おそらくは、氏名についてのマスタ・テーブルなのでしょうから、
Bさんのレコードが2つあるというのは、まずいですよね。
 そこで、一工夫する必要があります。
 
 その前提として、大項目テーブルと小項目テーブルの対応関係、
つまり、一対一か、一対多か、多対一か、多対多かということを
まず考えてみてください。

 私の体験では、この関係を考えるときは、頭で考えるだけでは不十分であり、
紙に図を書いて、各テーブルのレコードを結ぶ線を引いて考えないとダメでした。


 私がアクセスをいじりだして数年の間は、
テーブルの関係が一対一なのか、一対多なのかということを
全く考えなかったのですが、
近時、それをきちんと把握しないと進まないという事態に遭遇しました。
 テーブル相互の関係が一対一なのか、一対多なのかを把握することは
テーブル設計の基本のようです。

【12253】Re:コンボボックス絞り込みで2つに所属...
発言  初心  - 13/1/24(木) 17:08 -

引用なし
パスワード
   返信ありがとうございます。
小項目テーブルのBさんがID1,2となっておりますが、
今回の投稿で、このような感じでやりたいという、視覚的に分かりやすくするための記述でした。
(すいません私の説明不足です。)
実際はまだ、2項目に該当する人がなく、1項目ですんでいる状態です。
近々やってくる事態に備えての質問でした。

リレーションについてはある程度理解しており、絞り込みに生かすやり方がわかりません。一項目の絞り込みは既に行っているのですが、VBAでもよろしいので、引き続き御回答お願い申し上げます。

【12255】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/25(金) 2:28 -

引用なし
パスワード
   >リレーションについてはある程度理解しており、絞り込みに生かすやり方がわかりません。
 問題点が拡散してきたような気がします。


 第1に、1人の人の所属は常に1つだけであるという前提の下で、
コンボボックスの連動はでき上がっているのでしょうか。
 つまり、大項目コンボボックスで所属Bを選択すると、
小項目コンボボックスのリストには、所属がBの人だけが表示される
ということは、できているのかということです。

 
 第2に、コンボボックスの連動ができているならば、
次なる問題は、大項目テーブルと小項目テーブルをどう対応させるか
ということになります。
 これを考える前提が、前回のレスにも書きましたが、
大項目テーブルと小項目テーブルの関係です。
 大項目テーブルと小項目テーブルの関係は、一対一、一対多、多対一、多対多の
どれになるのでしょうか。


 第3に、よくわからないのは、小項目テーブルの使われ方です。
 小項目コンボボックスの表示のためだけにしか使わないというのであれば、
   Aさん ID1
   Bさん ID1
   Bさん ID2 ←
   Cさん ID2
   Dさん ID4
というように、Bさんのレコードを2レコードにすれば済みます。
 しかし、小項目テーブルを大項目テーブル以外のほかのテーブル、
特にその都度データを入力させるテーブル(トランザクション・テーブル)と
結合させることもあるというならば、Bさんを重複させるわけにはいきません。
 小項目テーブルの使われ方はどっちなのでしょうか。


 第4に、テーブル構成を示すときには、
テーブル名、主キー、主要なフィールドのフィールド名、それらのデータ型
も示してくださいね。

【12258】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/25(金) 23:48 -

引用なし
パスワード
   すいませんでした。テーブル構成等について説明が不足しておりました。
例として書かせて頂きます。

商品出品テーブルを元とした商品出品クエリをレコードソースに商品出品フォームを作成したました。(このフォームを親とし、サブフォームとして商品名や数量が表形式で埋め込まれています。)

フォームの上部で統一項目として下記を入力することとしています。

フィールド名 データ型

商品出品ID:オートナンバー
商品出品日:日付・時刻型
出品先施設:数値型←別の施設テーブル(住所・Tel等が入った施設テーブルと繋がっています。)
担当部署:数値型
担当者名:数値型

部署テーブル(1)対担当者テーブル(多)がIDで繋がり、絞り込みが掛かっています。
担当者テーブルが商品出品IDと繋がり、このフォームに日付を入力し、担当部署をコンボボックスで選び、絞り込んだ担当者名を担当者コンボボックスにて入力をできるようにしています。
担当者テーブルには、名前、年齢、個人住所等の情報が入っているので、IDを二つ持たせると、情報に変更が生じた場合両方を直さないといけないので担当者に持たせるIDは一つとしたいです。

このサイトを参考として、おっしゃるとおり、1人の所属は常に1つだけであるという前提下での連動はできています。
hamachan.info/access/sibori.html
他にも不足等ございましたら、お手数をお掛け致しますが、お知らせ下さいますようお願い致します。

【12260】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/26(土) 1:35 -

引用なし
パスワード
    私がこのスレッドで最もポイントになるなと思ったのが、
大項目テーブルと小項目テーブルの関係なんですね。

>部署テーブル(1)対担当者テーブル(多)がIDで繋がり、
とのことですが、
部署テーブルと担当者テーブルが一対多なら、
担当者が2つの所属部署を持つということはありえません。
 担当者が2つの所属部署を持つならば、両テーブルの関係は一対多ではありません。


 本当は、ここを初心さんに出してほしかったのですが、
一対多ということが出てきたので良しとしましょうか。
 担当者が2つの所属部署を持つならば、両テーブルの関係は多対多です。


 リレーショナルデータベースでは、多対多のテーブルは結合させられません。
 そこで、多対多の場合は、結合テーブルを別に作り、
これを介して両テーブルを結合させます。
 結合テーブルの具体的な作り方については、ネット上を検索してみてください。


 そして、部署テーブル、担当者テーブル、結合テーブルから成るクエリを作り、
それを小項目コンボボックスのRowSourceに指定します。

 このクエリでは、大項目コンボボックスの値で抽出するという抽出条件を
設定しておきます。

【12261】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/27(日) 0:16 -

引用なし
パスワード
   ありがとうございます。考え方が判って参りました。
リンククエリを作成するところまではうまくいっていると思います。
リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなる「部署と担当者リンククエリ」を作成しました。
このクエリで「リンクID」と「部署テーブル」「担当者テーブル」からそれぞれ、部署名、担当者名を選択し、クエリの部署名の抽出条件欄に=Forms!フォーム名!大コンボボックス名を記入するところまではできました。
ただ、RowSourceというVBAを使用したことがなく、他で調べてみるとフォーム全体のプロパティの「読み込み時」に書くと思うのですが、色々試したもののうまく作動しません。

Private Sub Form_Load()

Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]

End Sub
と記述したのですが、上記に誤り等ございましたら、御手数をお掛け致しますが、
御指導の程、よろしくお願い致します。

【12262】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/27(日) 2:03 -

引用なし
パスワード
   >リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなる「部署と担当者リンククエリ」を作成しました。

 結合テーブルが作成された形跡がありませんが、
結合テーブルは作ったのでしょうか。


>Private Sub Form_Load()
>
>Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]
>
>End Sub
 このコードにはいくつか問題がありますが、
それよりも、多対多結合を実現させることの方が先です。

【12263】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/27(日) 23:36 -

引用なし
パスワード
   ▼かるびの様お世話になっております。
リンクID「オートナンバー」、部署ID「数値型」、担当者ID「数値型」テーブルからなるクエリを作成しました。

と書きましたが、このクエリの元になっているテーブルである部署IDは「部署テーブル」の部署IDと多と一の関係で結ばれており、担当者IDは「担当者テーブルの」担当者IDと多と一で結ばれておます。これにリンクIDを付けたのですが、これで「部署テーブル」と「担当者テーブル」が「部署と担当者リンクテーブル」を介して多対多で結ばれ、多対多結合をした事にはならいのでしょうか?私の考え方が根本的に間違っているのでしょうか?御教授下さいますようお願い申し上げます。

【12264】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/28(月) 1:57 -

引用なし
パスワード
   >このクエリの元になっているテーブルである部署IDは「部署テーブル」の部署IDと多と一の関係で結ばれており、担当者IDは「担当者テーブルの」担当者IDと多と一で結ばれておます。これにリンクIDを付けたのですが、これで「部署テーブル」と「担当者テーブル」が「部署と担当者リンクテーブル」を介して多対多で結ばれ、多対多結合をした事にはならいのでしょうか?

 結合テーブルは作っていたのですね。
 多対多の結合として、OKです。  

 蛇足ですが、「部署と担当者リンクテーブル」という名前はやめた方がいいですよ。
 というのは、「リンクテーブル」という言葉は、違う意味で使われるからです。
つまり、A.mdbファイルにある甲テーブルをB.mdbファイルで使うときに、
テーブルをリンクさせるという手法が取られることがありますが、
このとき、B.mdbファイルから見た甲テーブルを「リンクテーブル」と呼ぶというのが、
通常の「リンクテーブル」という言葉の使われ方です。


 次ですが、「部署と担当者リンクテーブル」には然るべきレコードが積み込まれていますか。
 つまり、「部署と担当者リンククエリ」において、Bさんについて
   Bさん  ID1
   Bさん  ID2
というようにBさんが2レコード出てきていますか。


 次は、小項目コンボボックスのRowSourceとなるクエリですね。
 記事12261で、
>>>Private Sub Form_Load()
>>>
>>>Me.担当者コンボボックス名.RowSource = "SELECT [部署と担当者リンククエリ].[担当者名]
>>>
>>>End Sub
とありました。
 このSQL文は途中で切れていますが、その続きはどのようになっているのですか。

 それから、大項目コンボボックスの
BoundColumnプロパティとRowSourceプロパティには何が指定されていますか。
 RowSourceプロパティに指定されているのがテーブル名又はクエリ名である場合、
そのテーブル又はクエリでは、どういう順番で何というフィールドが並ぶのですか。

 また、小項目コンボボックスについて、
BoundColumnプロパティ、ColumnWidthsプロパティには何が指定されていますか。


 最後に、コンボボックスの名前が最初とは変わってきているようですが、
どれが正しいんでしょうか。

【12267】Re:コンボボックス絞り込みで2つに所属...
発言  初心 E-MAIL  - 13/1/28(月) 23:51 -

引用なし
パスワード
   こんばんは連日の御指導ありがとうございます。

記載した、VBAコードは調べて書いてみたのですが、過不足、誤り等があれば、御指導頂きたいです。(今回作成した、コンボボックス及びクエリと、どのように絡めていけばよいのか、まだ判らない状態です。)

御指導頂いて、作成した、「結合クエリ」は正常に作動しているようです。
名前はそのような都合が後から出てくるのだと知りました。以後、それを踏まえた上でクエリの名前を決めようと思います。

大項目コンボボックスは
RowSource(値集合ソース)所属テーブル
BoundColumn(連結列)は1となっております。
この部署テーブルは
部署ID(数値型)(主キー)
部署認識番号(テキスト型)会社規定の部署認識番号で数字に意味はありません。
部署名(テキスト型)
という構成になっています。

小項目コンボボックスは現在、
RowSource(値集合ソース)「所属及び担当絞り込みクエリ」という、上記の所属テーブルの(所属ID)と「担当テーブル」に作成した(所属ID)を一対多でリレーションをしたクエリを指定しており、(今までの1所属、1名担当の絞り込みで使用していたものです。今回、作成した「結合クエリ」に代える事になると思います。)
BoundColumn(連結列)は1となっております。

担当者テーブルは

担当ID(数値型)(主キー)
氏名(テキスト型)
生年月日(日付型)
住所(テキスト型)
役職(テキスト型)
Tel(テキスト型)という構成になっています。

すいません、以後、大項目コンボボックスは(部署コンボボックス)小項目コンボボックスは(担当者コンボボックス)でお願い致します。

色々と御迷惑をお掛け致しますが、よろしくお願い致します。

【12269】Re:コンボボックス絞り込みで2つに所属...
回答  かるびの  - 13/1/29(火) 1:28 -

引用なし
パスワード
    話を戻すようで申し訳ないのですが、
1名の担当者に複数の所属を持たせたいという場合の担当者コンボボックスの作り方は、
担当者の所属が1箇所だけの場合と同様です。

 部署コンボボックスの連結列が1であるとのことなので、
部署コンボボックスが返す値は「部署ID」フィールドの値になるわけですから、
現状の「所属及び担当絞り込みクエリ」からテーブルを一部変えてやればいいだけのはずです。


>記載した、VBAコードは調べて書いてみたのですが、過不足、誤り等があれば、御指導頂きたい
>です。(今回作成した、コンボボックス及びクエリと、どのように絡めていけばよいのか、まだ判ら
>ない状態です。)

 この点については、RowSourceプロパティを、
デザインビューのプロパティシートから指定するのか、
VBAを使って指定するのかというだけの違いです。
 プロパティシートから指定するのであれば、無理してVBAを使う必要はありません。

【12273】Re:コンボボックス絞り込みで2つに所属...
お礼  初心  - 13/1/31(木) 0:31 -

引用なし
パスワード
   かるびのさんの御指導のとおり行ったところ、お陰様をもちまして、無事に望み通りのものが完成いたしました。大変ありがとうございました。
おそらく、必要とされている方が多い技だと思いますが、なかなか見つからずに苦慮しておりました。(私が見つけられなかっただけかもしれませんが)
もし、また壁にあたった時は、御指導下さいますよう何卒お願い申し上げます。

284 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free