<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



「クエリーもどき」を作ります。

コンボボックスの中に表示してもらいたいものを決めるための操作です。なんかメッセージが出てきたという人は、OKして先に進んでください。

まず、「商品テーブル」の中身を出したいので、商品テーブルを選びます。商品テーブルだけでよいので、テーブルの表示のウィンドウだけ閉じましょう。


んで、全部のフィールドはいらないなーと思うんで、商品番号と商品名、このふたつだけ選ぶとしましょう。
多分、何も気にしなくても「商品番号順」に並んでくれるとは思いますけど、いちおう・・・商品番号順に並ぶよう、昇順の設定もしておくとしましょう。


これでオッケー。保存せず、ウィンドウを閉じます。
べつにクエリー作ってるわけじゃないですからね。保存はしません。

多分、なんかメッセージが出ますよね。多分・・・。
これは、「値集合ソースの変更をするのか?」という意味です。そうなので、「はい」の方のボタンをクリックします。

これで、コンボボックスの中には、「商品テーブルの中の[商品番号]と[商品名]が格納されるようになります。


しかし!

かならずしも、格納されたものが出てくるとは限らないのです!

そう・・・。基本的にコンボボックスというのは「1列分」のデータ表示をするつもりでいます。
今回のように、[商品番号]と[商品名]を並べて出したい、という場合は、変えてやらないといけないところがあるんですよ。

コンボボックス[商品番号]のプロパティを見ましょう。「書式プロパティ」です。
見るところは
 「列数」 ← 2 にする。
 「列幅」 ← 1;3 商品番号が1センチ、商品名が3センチ
  (入力は 1;3 でオッケー。セミコロンで区切った半角の数値)

 「リスト幅」 ← 4.5 列幅で、合計4センチは必要になるから、スクロールバーのこととか考えて全部で4.5センチにしようかな・・・入力は4.5と半角で。cmはいりません)

で、どうでしょう・・・。
フォームを保存して、フォームビューに切り替えてみてください。もしかしたら、伝票番号が別のレコードが表示されてるかもしれませんけど、とりあえずコンボボックスの様子だけでも確認してくださいね。


出ます?
左のように出れば、とりあえずオッケー。コンボボックスは、ちょっと変わった仕組みを持ってますから、プロパティの設定の仕方とか、なれないととっつきにくいかもしれないですね。でも、すごく便利なので、ぜひ活用してください。

不思議なもんなんですけど、2列出てくるようになっても、この[商品番号]のコンボボックスを通じてテーブルに入力される値は「商品番号」なんですよ。
この辺もプロパティをいじればいろいろ工夫することができるんですけど、今日はこのままで行きましょう。

で、細かいことなんですけど・・・・。
商品番号をコンボから選んだら、すぐ「個数」の入力に入りたいと思いません?

そういうときは、コンボボックスの更新後処理で「コントロールの移動」っていう動作を作ってやればよいのです。移動先の名前を指定しなくちゃいけないんですけど・・・。

みなさん、フォームウィザードでこのフォーム作りましたから、「個数」のテキストボックスの名前は「個数」だと思いますんで、「個数という名前のついているもののところへ移動」するようにイベントを作ってみましょう。

たった1行ですみますので、できればコードビルダを使って・・・。

DoCmd.GoToControl "個数"

マクロを作るのならば、なんか適当なマクロ名をつけて、選ぶアクションは「コントロールの移動」、移動先のコントロール名を下のほうに入力すれば、同じ動きを見せてくれますよ。
みなさん、もうイベントの作り方の段取り、慣れました??少しずつ慣れていってくださいね。

で、ちょっと実験・・・商品番号を選びなおしてみてください。別の商品番号を選んでみて、コンボボックスから手を離すと・・・。

ね。個数のところにカーソルが(フォーカスって呼んだりしますが)移動しますでしょ?

こういうちょっとした工夫が、入力ミスや間違いを防ぐことにつながっていくんじゃないかと思うんで、皆さんもご自分のデータベースの中で、いろいろ工夫してみてくださいね。


なぬ?商品番号だけじゃなくて、商品名も表示させたい???えーいいじゃないですか商品番号さえ表示されてれば。コンボを開けば出てくるんだし。
えー・・・やるんですか???もー、もっとお話したいことがいっぱいあるのに・・・それに、ちょっと難しいですよ、それ。

わかりましたよう。やってみましょう。
んじゃあ、まず、商品名を表示させるためのテキストボックスを作りましょう。
ちょっと狭いですけど、やりくりしてテキストボックスをひとつ設けてください。↓

で、忘れないうちに・・・このテキストボックスの名前を確認しておいて下さい。・・・まさか、名前ってなんだっけ?とか思ってないですよね???

このテキストボックスのプロパティの「その他」の「名前」ってとこですよ。多分、ただ作っただけだと、「テキスト10」とか、適当な名前がついてると思います。
みなさんのテキストボックス、なんて名前になってます?

え?「非連結」?
それはテキストボックスの名前じゃないでしょう〜!!!
ちゃんとプロパティを見てくださいよう。

このままでも、わけがわからなくならなければいいんですが・・・わたしは「商品名」って書き換えました。

この方が後々わかりやすいかな、と思って。

見た感じこんな感じになります。
でも、このままじゃなんも出ませんよね。・・・なんで出ないかは・・・まさかわかんないとか言わないですよね・・・。

テキストボックスの中身を決めるのは、プロパティの「コントロールソース」というところの内容ですよね。大抵は、基となるテーブルやクエリーの中のフィールド名が、コントロールソース欄に割り当てられてます。
これがぜんぜんわからないって方は、もう一度フォームの作り方のとこ、おさらいしておいて下さいね。


で、ここでちょっとばかり、コンボボックスを活用した「うらわざ」を・・・。
コンボ、2列にしましたよね。
下の図で行くところの赤い枠の部分のことを Column(0)
緑色の枠の部分のことを Column(1)
って呼ぶんです。
これを活用して、「このコンボボックスの中から商品名を[商品名]テキストボックスの中に代入しちゃう」っていう処理を作ってみようと思います。なかなか使えるんですよ、これが。


商品番号のコンボボックスの、更新後処理イベントに、1行追加してやります。
右端のビルドボタンをクリックしてやってください。

書き方は、こんな感じ・・・。
[商品名]という名のテキストボックスの中に、商品番号コンボボックスの2列目の値を代入」って命令です。


で、ちょっと試してみていただきたいんですけど・・・。
これはこれで、利用価値のある方法なんですよ。でも、でも・・・。

サブフォーム内で、1行目の入力をするときはいいと思うんですけど・・・。
2行目入力するとき、1行目の商品名も書き換わっちゃうと思いません?????

バグじゃないですよ。これはこういうものなんです。
テキストボックスの中身を決めるのは、「コントロールソースの内容」って、お話しましたよね。でも、[商品名]のテキストボックス、今まだ「非連結」です。つまり、なんの値も持ってないんです。
だから、各行全部書き換わっちゃうんですよ。非連結では、値を保持しておくことはできないのです。


・・・この方法ではだめですね・・・。他の方法を考えなくちゃ・・・。

せっかく書いていただいたんですけど、この方法はまた別の機会に活用していただくってことで・・・。
この行、削除してください。他の方法考えましょう。

あ、削除するのは、オレンジ色のしるしをつけた行だけですよ。