Microsoft Office全般(Excel/Word/PowerPoint/Access/Outlook/OneNote)の使用方法を解説。

www.wanichan.com

PC > Access > FAQ

[Access] コンボボックスで選択した値で。。。

Microsoft Office Users Forum過去ログ

■1024 / inTopicNo.1) コンボボックスで選択した値で。。。

□投稿者/ you 一般人(1回)-(2005/09/07(Wed) 10:41:14)


記事内容:[Access] 

おはようございます。

初めまして,質問させて頂きます。
まだ初心者なので基本的な質問かもしれませんが
よろしくお願いします。

では早速ですが
コンボボックスでいくつかの選択肢を作り
フォームで選択してテーブルにレコードする
と言った所までは作ったのですが,
更にコンボボックスで選択時に選択肢に
対応した値の両方を
同じテーブルの別フィールドに自動的に
レコードできるようにしたいのですが。。。

例えば
   コンボボックス選択肢(行事) 対応した値(場所)

      ハイキング       →    山
       海水浴        →    海
       鮎釣り        →    川

この両方の値を同じテーブルで別フィールドで

       行 事         場 所

      ハイキング          山
       海水浴          海
       鮎釣り           川

このようにしたいのですが。

何卒よろしくお願いします。

■1033 / inTopicNo.2) Re[1]: コンボボックスで選択した値で。。。

□投稿者/ シムリー 一般人(32回)-(2005/09/08(Thu) 05:14:58)

一回の選択で、2つのフィールドの値を決めようとするのですから普通の方法ではなかなか難しいです。
VBAを使えば、実装することは出来ますが、そこまでする必要があるか疑問に感じます。

というのは、行事フィールドの値が決まれば、場所フィールドの値が1対1で決まる関係(関数従属)なので
本来このデータは、別のテーブルに分離するべきです。

よくある別の事例で言えば、お店の売り上げ記録を残す際に
売った商品を選択すると同時に、定価も記録したいという発想に近いですね。
これもまた商品の名前と定価は1対1で決まるので、売り上げテーブルとは別に商品テーブルを作って、
商品番号、商品名、定価を先に保存しておきます。
商品が売れた場合は、商品番号だけを記録していくのが正しいアプローチです。
そしてさらに付け加えれば、売れた商品の名前と定価を1件1件確認する際には、
2つのテーブルから表示させたいフィールドだけを、クエリを使って取り出します。


>        行 事         場 所
>
>       ハイキング          山
>        海水浴          海
>        鮎釣り           川

行事ID  行事名  場所
-----------------------
1     ハイキング  山
2      海水浴  海
3      鮎釣り   川

↑のような行事テーブルを作成して、コンボボックスで選択するのは
行事IDだけにしたらどうでしょうか?
コンボボックスのウィザードを使えば、行事名を表示させて登録するデータは行事IDという具合に簡単に設定できるはずです。

■1075 / inTopicNo.3) Re[2]: コンボボックスで選択した値で。。。

□投稿者/ レモン 一般人(1回)-(2005/09/14(Wed) 12:53:46)

>更にコンボボックスで選択時に選択肢に
>対応した値の両方を

対応するイベント時の処理内に
Insert文もしくはUpdate文を記述すれば対応可能です。
コンボボックスは値リストなのでしょうか?

■1096 / inTopicNo.4) Re[3]: コンボボックスで選択した値で。。。

□投稿者/ you 一般人(3回)-(2005/09/16(Fri) 14:09:29)

どうもです。

値リストです。

insert文 update文は使った事がないのですが。。。

どのようにしたらよいのでしょう?

■1098 / inTopicNo.5) Re[4]: コンボボックスで選択した値で。。。

□投稿者/ シムリー 一般人(36回)-(2005/09/17(Sat) 02:24:17)

> insert文 update文は使った事がないのですが。。。
>
> どのようにしたらよいのでしょう?

割り込みますけど、やめた方がいいと思います。
結局VBA(またはマクロ)でinsert updateを発行することになります。
しかも、insert か update か状況により分岐させなければなりませんし
なにより、発行のタイミングがコンボの選択時ということに大きな問題が残ります。
不良レコードの山、エラーの山に見舞われることになるような気がします。

1033の記事のように、行事テーブルを作ることをおすすめします。
コンボボックスが既に存在しているのなら、プロパティから値集合リストを値リストではなくテーブル/クエリに変更し
値集合ソースを行事テーブルに変更します。
同じくプロパティの書式タブ-列数を「3」に変更、列幅に 0;2;2 と入れます。

出来たら、そのコンボボックスをコピーし同じフォーム上にもう一つ貼り付けてください。
貼り付けたコンボのプロパティで、列幅を 0;0;2 に変更します。
2のところは、状況によって長さを最適な長さに変えてみてください。

テーブルには行事IDが格納され、フォームでは行事名と場所が表示されます。
一覧を作る必要があれば、2つのテーブルを連結してクエリを作ればいいことです。
リレーショナルデータベースとはこのように活用するべきものだと思います。

スポンサーリンク
INDEX
  • このエントリーをはてなブックマークに追加

コメント

※技術的な質問はMicrosoftコミュニティで聞いてください!

▲このページのトップへ