<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--リストボックスで複数選択
  1 → 2 → 3



さて・・・さらに細かいお話になりますが・・・。
In ('さつまいも','やまいも','えんどうまめ') の中身を、In ('リスト0の1件目','リスト0の2件目…','リスト0のn件目') っていう風にしたいんです。
これやんないと意味ないですよね。
うまいこと、シングルコーテーションとカンマを加えていかないといけないんですが・・・。

シングルコーテーションとカンマは、そのものを変数に代入したいんです。でも、カンマとかって、特別な役割がありそうですよね。そのまま代入したんだと、Accessが別の意味に捉えて変数の中身を区切ったりよけいなことをしそうです。

なので、変なんですが、シングルコーテーションとカンマは、ダブルコーテーションで囲みます
で、アンドでつなぎます。

わはは。もうこんなのいやだー!!!

AAA = AAA & "" & ctl.ItemData(varItm) & ""

AAAという変数と、'(シングルコーテーション)をダブルコーテーションで囲んだやつと、 ctl.ItemData(varItm) を、&で結んでます。
いい加減に適当に書いてるわけじゃないんですよ。ちゃんと書き方があるんで、その辺じっくり眺めてくださいね。

これで、AAAの中身が、‘さつまいも’’やまいも’’えんどうまめ’ ってなるはずです。リストボックスでそう選んでるんで・・・。

あとはカンマで区切ってやればいいんですけど・・・。
カンマはあくまでも「区切り記号」なんです。だから、カンマで始まってもいけないし、カンマで終わってもいけないんですよ。

AAA = AAA & "’" & ctl.ItemData(varItm) & "’,"

こうすると、
‘さつまいも’,’やまいも’,’えんどうまめ’,
ってなっちゃう。カンマで終わっちゃうんですよね。

うーん・・・めんどくさいなぁ。もっと手っ取り早い方法はないかしら・・・。
じゃあ、

AAA = AAA & ",’" & ctl.ItemData(varItm) & "’"

こうして、先頭に1文字、余分なカンマが入るようにしておいて、Mid関数で2桁目から右側を取り出すようにしてみましょうか。
多分、一番簡単で単純な回避策じゃないかと・・・。


んでもって、sqlそのものを書き換えます。
これがまた大変なんだ・・・。AAAっていう変数の中身を、In()のカッコの中に入れたいんですけど、これ、文字列としてわたりますから・・・。
このまま

In (AAA )

って書いたんじゃ、AAAっていう変数だということがわかってもらえないんです・・・AAAっていう名前の「何か」を探してしまいます。
そこで・・・。AAAの部分だけ、ダブルコーテーションの外に出します。

"SELECT ・・・・・FROM・・・・・WHERE (((テーブルA.素材) In (" & AAA & ")));"

SQL文を3つに分けて、&でつなげてます。

こうすれば、AAAの部分には、ForEach文でゲットしたリストボックスの中身がずらっと入るはずです。




おっしゃ!んじゃテストだ!

なんか適当な素材名を選んで・・・。
ギャー!!なにこれ!!!

あ、一度「うそクエリ」って作って存在してるから、同じ名前のものは作れない、って言ってるのか・・・。
上書きしてくれていいのに。もう、気が利かないなぁ。

うーん、なんかもっといろいろやらなくちゃいけないような気がするけど・・・。
と、とりあえず、初めに「うそクエリ」削除しましょうかね。

マクロの「オブジェクトの削除」っていうアクションを使ってます。
これが一番手っ取り早そうです。
あと、ただクエリ作っただけでシーンとしているのも味気ないんで、クエリ開いてみましょうか。




今度こそっ!

できたー!!!やっほう!

何回か繰り返しやってみてくださいね。あ、こんなことは書くまでもないと思いますが、クエリは閉じてくださいよ。
なぜって・・・クエリ、削除しますからね。毎回・・・開いてちゃ削除できないですもんね。

で、一覧表みたいなのを印刷したければ、この「うそクエリ」をレコードソースにしたレポートを作って、クエリそのものの代わりにそのレポートを開けばいいし、フォームでもいいですよね。
ちょっと表示するだけなら、このデータシートビューの状態だけでも事足りるかもしれません。
まあ、その辺はみなさん個々に活用してください。

もし、テーブル名やフィールド名があとあと変更になったりした場合、いろいろ書き換えないとならないので、はっきりいってあんまりお勧めの方法ではありませんけれど、だいたい把握していただいていれば、どこを書き換えなくちゃいけないかすぐ見つかりますよね。いろいろ応用が利くんじゃないかと思いますよ。


「リストボックスから1件も選ばなかったとき」どうするか、とか、まだ少し考えなくちゃいけないとこがあると思いますが・・・(今の状態だとSQLのエラーになっちゃいますから)、AAAがNullだったらメッセージを出すとか、なんかそんな配慮をプラスしていかないとならなそうですね。
その辺は、うまいこと工夫していってみてください。