Access VBA質問箱 IV

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

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


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

【4862】コンボボックスについて 木村義春 05/4/10(日) 23:06 質問[未読]
【4863】Re:コンボボックスについて 木村義春 05/4/10(日) 23:08 質問[未読]
【4868】Re:コンボボックスについて 小僧 05/4/11(月) 13:09 回答[未読]
【4872】Re:コンボボックスについて 木村義春 05/4/11(月) 20:05 質問[未読]
【4874】Re:コンボボックスについて クマゴロー 05/4/11(月) 23:01 回答[未読]
【4876】Re:コンボボックスについて 木村義春 05/4/12(火) 5:37 発言[未読]
【4879】Re:コンボボックスについて 小僧 05/4/12(火) 10:45 発言[未読]
【4882】Re:コンボボックスについて 木村義春 05/4/12(火) 19:51 発言[未読]
【4894】Re:コンボボックスについて 木村義春 05/4/13(水) 21:05 発言[未読]
【4895】Re:コンボボックスについて 木村義春 05/4/13(水) 22:14 発言[未読]
【4896】Re:コンボボックスについて 小僧 05/4/14(木) 10:50 発言[未読]
【4897】Re:コンボボックスについて 木村義春 05/4/14(木) 20:01 発言[未読]
【4898】Re:コンボボックスについて 小僧 05/4/15(金) 11:17 回答[未読]
【4908】Re:コンボボックスについて 木村義春 05/4/15(金) 20:51 発言[未読]

【4862】コンボボックスについて
質問  木村義春  - 05/4/10(日) 23:06 -

引用なし
パスワード
   所属と所属別に分けた番号を定義したT_所属があります。

T_所属

番号   所属
100 A
200 B
300 C
400 D
500 E

T_アドレスの[所属]で、コンボボックスでA〜Eを選択する。
Aを選んだら、番号は100。Cを選んだら番号は200という風に
所属部分のコンボボックスで選択したら、番号も自動的に入れるように
したい。

T_アドレス

番号   所属
100 A
100 B
200 C
200 D
300 E

T_アドレスのルックアップでコントロールをコンボボックスにして、
SELECT [T_所属].[所属], [T_所属].[番号] FROM T_所属;

としたんですが、選択するところまではOKだけど、
番号が自動的に入力されません。

わざわざ、入力するの大変ですし、どうかにならないでしょうか。
皆さんのお力をお貸しくださいm(__)m

【4863】Re:コンボボックスについて
質問  木村義春  - 05/4/10(日) 23:08 -

引用なし
パスワード
   >T_アドレス
>
>番号   所属
>100 A
>100 B
>200 C
>200 D
>300 E

失礼しました。

T_アドレス

番号   所属
100 A
100 A
200 B
200 B
300 C

です。よろしくおねがいします。

【4868】Re:コンボボックスについて
回答  小僧  - 05/4/11(月) 13:09 -

引用なし
パスワード
   ▼木村義春 さん:
ご提示された内容ですとちょっと解りかねるところがありましたので、
想像を加えながら…

フォームのコントロールソースが「T_アドレス」で

コンボボックス  「所属コンボ」 
テキストボックス 「番号テキスト」
が存在すると仮定します。

所属コンボ:
コントロールソース:所属
値集合ソース   :SELECT T_所属.所属 FROM T_所属;

番号テキスト:
コントロールソース:番号

として、

Private Sub 所属コンボ_AfterUpdate()
  Me.番号テキスト.Value = DLookup("番号", "T_所属", _
              "[所属] = '" & 所属コンボ.Value & "'")
End Sub

でどうでしょうか?
外していたらすみません。

【4872】Re:コンボボックスについて
質問  木村義春  - 05/4/11(月) 20:05 -

引用なし
パスワード
   ▼小僧 さん:

ご返信頂きまして、感謝しております!
お忙しいところ、本当に申し訳なく思っております。
フォーム上でもやりたいと思ったんで助かりました。

下記のやり方は、フォーム上でコンボボックスとテキストボックスが
存在して、コンボボックスをT_所属の[所属]を元に選択したら、自動的に
番号が入力される考えですよね。

>フォームのコントロールソースが「T_アドレス」で
>
>コンボボックス  「所属コンボ」 
>テキストボックス 「番号テキスト」
>が存在すると仮定します。
>
>所属コンボ:
>コントロールソース:所属
>値集合ソース   :SELECT T_所属.所属 FROM T_所属;
>
>番号テキスト:
>コントロールソース:番号
>
>として、
>
>Private Sub 所属コンボ_AfterUpdate()
>  Me.番号テキスト.Value = DLookup("番号", "T_所属", _
>              "[所属] = '" & 所属コンボ.Value & "'")
>End Sub

私がやりたいのはその逆でテーブルです。
つまり、小僧さんがフォーム上で実施した場合のやり方と同じですが、
T_アドレスの[所属]をコンボボックスで選択する。
テーブルをデザインビューで開いて、ルックアップのところに
表示コントロールがあるので、それをテキストからコンボに変更したんです。

そのコンボボックスは、T_所属の[所属]から選択するものとして、
選択したら、選択した内容にあわせて、番号を自動入力したいのです。

T_アドレス
ID 性 名 番号 所属 会社名 住所
1    100 A  ・・・・
2    100 A
3    200 B
4    200 B
5    300 C
       ↑コンボボックスで選択(T_所属の[所属]から)
     ↑T_所属で定義された番号が自動入力

並び替えの時に役立つんで。

T_所属

番号 所属
100 A
200 B
300 C
400 D
500 E

テーブルのルックアップに
値集合タイプ:テーブル/クエリ
値集合ソース:SELECT [T_所属].[所属] FROM T_所属;
としたんですが、単純に所属だけ表示され、選択するだけになります。
番号は自動入力されません。それを実現したいのです。

小僧さんが記述して頂いたプログラムを、
SQL文で表現するとどのように記述するんでしょうか?

教えてください。宜しくおねがいしますー。

【4874】Re:コンボボックスについて
回答  クマゴロー  - 05/4/11(月) 23:01 -

引用なし
パスワード
   所属コンボ
  コントロールソース:所属
  値集合ソース   :SELECT T_所属.所属 FROM T_所属;
  連結列      ;2
 
Private Sub 所属コンボ_AfterUpdate()
  番号テキスト.Value = 所属コンボ.colum(0).value
End Sub


これでどうですかね?

【4876】Re:コンボボックスについて
発言  木村義春  - 05/4/12(火) 5:37 -

引用なし
パスワード
   ▼クマゴロー さん:
早速の回答を頂きまして感謝しております。

これも小僧さんと同じく、フォーム上からの実現です。
テーブル上でコンボボックスで選択した時の番号の自動入力の件を
解決したら、フォーム上でも確かめようと思っていました。

フォーム上で実施する場合は、小僧さん、クマゴローさんのやり方を
確かめたいと思います。

>所属コンボ
>  コントロールソース:所属
>  値集合ソース   :SELECT T_所属.所属 FROM T_所属;
>  連結列      ;2
> 
>Private Sub 所属コンボ_AfterUpdate()
>  番号テキスト.Value = 所属コンボ.colum(0).value
>End Sub
>
>
>これでどうですかね?

私が今、やりたいのは、テーブルです。
【4872】コンボボックスについて を参照ください。

【4879】Re:コンボボックスについて
発言  小僧  - 05/4/12(火) 10:45 -

引用なし
パスワード
   ▼木村義春 さん:
T_アドレスに[社員番号]フィールドを持たせずに、
T_所属から連結した値を持ってくるクエリを
作成してみてはいかがでしょうか?

SELECT T_アドレス.ID, T_アドレス.姓名, T_所属.番号, T_アドレス.所属 , T_アドレス.会社名, T_アドレス.住所
FROM T_アドレス INNER JOIN T_所属 ON T_アドレス.所属  = T_所属.所属;

こんな感じのSQLをクエリのSQLビューに貼り付けて見てください。

…あくまで自分の考えですが、テーブルへのデータの追加、更新等は
直接テーブルをビューで開いて行なうのを避けたほうが良いかなと
思います。

【4882】Re:コンボボックスについて
発言  木村義春  - 05/4/12(火) 19:51 -

引用なし
パスワード
   ▼小僧 さん:

ご多忙のところ、回答頂きまして感謝致しますm(__)m

T_アドレス
ID 性 名 番号 所属 会社名 住所
1    100 A  ・・・・
2    100 A
3    200 B
4    200 B
5    300 C

↑これはあくまで仮の例(本当は他にもフィールドはたくさんある)

>T_アドレスに[社員番号]フィールドを持たせずに、

社員番号っていうか、所属番号です。(100:A所属、200:B所属・・という風に定義している)
その意味とは、T_アドレスの[番号]は削除するということでしょうか??それだと、並び替えはできなくなるのでは?

>T_アドレスに[社員番号]フィールドを持たせずに、
>T_所属から連結した値を持ってくるクエリを
>作成してみてはいかがでしょうか?

T_所属から連結した値を持ってくるクエリって、いうイメージが浮かびませんが、
作業手順はどのようにやるでしょうか?

作業手順がよく分かりませんが、
想像して、(間違いがありましたら、ご指摘をお願いします)
1) オブジェクトのクエリをクリック。
2) 新規作成
3) デザイン ビューで開く
4) SQLビューを開いて、
  SELECT T_アドレス.ID, T_アドレス.姓名, T_所属.番号, T_アドレス.所属 , T_アドレス.会社名, T_アドレス.住所
  FROM T_アドレス INNER JOIN T_所属 ON T_アドレス.所属  = T_所属.所属;
5) testという名前で保存。

と入れました。

しかしながら、これってT_アドレスからフィールドを選択しているだけですよね?
試しに、test(クエリ名)の、あるレコードの[所属]部分をA→Bに変更しましたが、番号は変わりません。
所属が変わったら、番号もT_所属で定義された番号に変わるっていう仕組みにしたいんですが、
作業手順はどうすればよろしいでしょうか?

具体的に作業手順を、画面例とか、テーブル例を示して頂けるとありがたいです。宜しくお願いします。

T_アドレス
ID 所属番号 所属 会社名 住所 ・・・25くらいある。
1 100   A  ・・・・
2 100   A
3 200   B
4 200   B
5 300   C

所属番:数値型、所属:テキスト型

T_所属
  所属番号 所属
1 100   A
2 200   B
3 300   C
4 400   D
5 500   E


約10個くらい

クエリ作成した方がよいとのことでしたら、どういう構造でしょうか?

【4894】Re:コンボボックスについて
発言  木村義春  - 05/4/13(水) 21:05 -

引用なし
パスワード
   ほかにも案がありましたら、宜しくお願いします。
言葉だけではとらえにくいので、テーブル構成とかクエリ構成の図も
示していただけるとありがたいです。

例えば、T_アドレスの所属は削除して、番号のみにするとか。。

【4895】Re:コンボボックスについて
発言  木村義春  - 05/4/13(水) 22:14 -

引用なし
パスワード
   ▼小僧 さん:

>SELECT T_アドレス.ID, T_アドレス.姓名, T_所属.番号, T_アドレス.所属 , T_アドレス.会社名, T_アドレス.住所
>FROM T_アドレス INNER JOIN T_所属 ON T_アドレス.所属  = T_所属.所属;

T_アドレスはフィールド数が多いので、
T_アドレス.* としました。

気になったんですが、
上記をクエリのSQLビューに貼り付けてみました。
SELECT T_アドレス.* FROM T_アドレス INNER JOIN T_所属 ON T_アドレス.所属1 = T_所属.所属;

これを貼り付けた結果、クエリを編集してみると、
このレコードセットは更新できませんとメッセージ表示されてしまいます。

この方法だと、クエリの所属を変更したら、番号も自動的に入力される
ようになるでしょうか?

【4896】Re:コンボボックスについて
発言  小僧  - 05/4/14(木) 10:50 -

引用なし
パスワード
   ▼木村義春 さん
おはようございます。

【4879】Re:コンボボックスについて において
>T_アドレスに[社員番号]フィールドを持たせずに、
>T_所属から連結した値を持ってくるクエリを
>作成してみてはいかがでしょうか?

と書きましたが、[所属]フィールドの間違いでした。すみません。

というのも、上記はテーブルの正規化を提案しております。

T_所属マスタ
所属コード 所属名
100     A
200     B
300     C
400     D
500     E

T_アドレス
ID 姓名    所属コード 会社名     住所
1 山田 太郎  100    XX有限会社  ・・・・
2 鈴木 次郎  200    ○○○○    ・・・・
3 佐藤 花子  300    ☆☆☆     ・・・・
4 田中 三郎  400    ××有限会社  ・・・・

会社名についても、例えば「XX有限会社」が「XX株式会社」となった場合には
「××有限会社」に所属する全員のレコードの変更が必要になるので
会社マスタを持たせたる必要が出てくるかもしれません。

こういった正規化をすすめた上でリレーションを組み、

SELECT T_アドレス.ID, T_アドレス.姓名, T_アドレス.所属コード,
      T_所属マスタ.所属名, T_アドレス.会社名, T_アドレス.住所
FROM T_アドレス INNER JOIN T_所属マスタ
      ON T_アドレス.所属コード = T_所属マスタ.所属コード;

とクエリを作成した方が良いのでは? というのが当方の提案です。

【4897】Re:コンボボックスについて
発言  木村義春  - 05/4/14(木) 20:01 -

引用なし
パスワード
   ▼小僧 さん:
こんばんわ。

T_アドレス
所属コード 管理コード 他のフィールド・・・
100    30
100    30
200    30
200    30
400    40

T_所属
所属コード 所属
100     A
200     B
300     C
400     D
500     E

T_管理
管理コード 管理
30     A
40     B
50     C
60     D
70     E

実は1つだけじゃなく2つありまして、教えて頂いたSQL文
(小僧さんの例は1つ)を参考に

SELECT T_アドレス.*, T_所属.所属, T_管理.管理
FROM (T_アドレス LEFT JOIN T_所属 ON T_アドレス.所属コード = T_所属.所属コード) LEFT JOIN T_管理 ON T_アドレス.管理コード = T_管理.管理コード;
を入れたらクエリが作成され、そのクエリで、

所属コードとか、管理コードの番号を変更してみたら、
T_所属で定義された所属が自動的に変更されていました。本当に有難う御座いました。

あと、そのクエリを元に、フォームを作りました。
下記を参考に、所属と管理を選ぶとする。
レコードソースは、q_Address です。

所属コンボ:
コントロールソース:所属
値ソース:SELECT T_所属.所属 FROM T_所属;

所属コード:可視をいいえにして隠す。(所属コンボで選択したら、自動的に変更されるようにしたい)
コントロールソース:所属コード

  Me.所属コード.Value = DLookup("所属コード", "T_所属", _
           "[所属] = '" & 所属コンボ.Value & "'")

としてみたところ、なぜか、前のフィールドを変更する前に、まずレコードを
保存してくださいとエラーが起きてしまいます。
そのエラーメッセージが何故、出てくるか疑問なので、ためしに、

  DoCmd.RunCommand acCmdSaveRecord
  Me.所属コード.Value = DLookup("所属コード", "T_所属", _
           "[所属] = '" & 所属コンボ.Value & "'")


としたら、大丈夫だけど、選択したら、番号は何も変更されないようです。

ちなみに、非連結にした場合は、選択したらテキストの番号は自動的に
変更されませんが、非連結であるため、何も表示されない状況で、何か選択しないといけないようです。

>所属コンボ:
>コントロールソース:所属
>値集合ソース   :SELECT T_所属.所属 FROM T_所属;

>番号テキスト:
>コントロールソース:番号

>として、

>Private Sub 所属コンボ_AfterUpdate()
>  Me.番号テキスト.Value = DLookup("番号", "T_所属", _
>              "[所属] = '" & 所属コンボ.Value & "'")
>End Sub

クマゴローさんのやり方も試したところ、
Me.所属コード.Value = Me.所属コンボ.colum(0).value
を入れてみたところ、「オブジェクトが必要です」とエラーが起きてしまいます。

お力を貸して頂けると幸いです。すいません。

【4898】Re:コンボボックスについて
回答  小僧  - 05/4/15(金) 11:17 -

引用なし
パスワード
   ▼木村義春 さん:
おはようございます。

>あと、そのクエリを元に、フォームを作りました。
>下記を参考に、所属と管理を選ぶとする。
>レコードソースは、q_Address です。

→レコードソースをT_アドレスに

所属コンボ:

[書式タブ]
列数: 2
列幅: 0cm;@@cm (@@は任意の値を)

[データタブ]
コントロールソース: 所属コード
値集合タイプ: テーブル/クエリ
値集合ソース: SELECT T_所属.所属コード, T_所属.所属 FROM T_所属;

というような連結フォームにしてみてはいかがでしょうか?

【4908】Re:コンボボックスについて
発言  木村義春  - 05/4/15(金) 20:51 -

引用なし
パスワード
   ▼小僧 さん:
>おはようございます。
こんばんわ♪

ご多忙のところ、回答を頂きましてありがとうございます。
あなたは私にとって、神様の存在です。

下記を試したところうまくいきました。
ただ、下記の方法だと、選択しているだけで、編集しているかしてないか判断は
できないので、同じ所属番号を2つ置きました。(やむを得ず。。)

1つは下記の同じ内容。
もう1つの所属は番号を表示するって形です。

>→レコードソースをT_アドレスに
>
>所属コンボ:
>
>[書式タブ]
>列数: 2
>列幅: 0cm;@@cm (@@は任意の値を)
>
>[データタブ]
>コントロールソース: 所属コード
>値集合タイプ: テーブル/クエリ
>値集合ソース: SELECT T_所属.所属コード, T_所属.所属 FROM T_所属;
>
>というような連結フォームにしてみてはいかがでしょうか?

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