みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA SQL構文 複数条件で検索方法

エクセルVBAで、アクセスのデータを読み込もうとしています。

複数条件で検索する際の、SQL構文がわからず困っています。

検索値・・・ 部署:(データ型)、月:(整数型)、担当:(データ型)

SQL構文・・・ " SELECT * FROM touban WHERE busyo = '" & 部署 & "' AND m2 = " & 月 & " AND tanto = '" & 担当 & "' ORDER BY m2 ASC "


検索値にすべて値が入っていれば検索できたのですが、
1つでも空白があれば検索されません。
(検索値=空白のデータはないので、当たり前ですが・・・)

そこで、IFステートメントで空白場合、そうでない場合と分けようかと思いましたが
検索値の個数が増えれば、大変です。

SELECT文の中にSELECT文を入れる方法(サブクエリっていうのかな)も考えたのでですが
うまくいきません。


どんな方法がありますか?

投稿日時 - 2015-04-19 02:33:54

QNo.8958372

困ってます

質問者が選んだベストアンサー

WHERE (busyo = '" & 部署 & "' OR '" & 部署 & "' = '') AND ...
のように、ひとつひとつの検索条件に OR 文で『空白の場合の条件』を加える方法があります。ただ、この方法の場合、DBのインデックスが効かなくなりますので検索パフォーマンスが遅くなるという問題が出る可能性があります。

やっぱり IF 文で判別するほうが良いかと思いますけどね。
sql = "SELECT ... WHERE "
concatWord = ""
IF 部署 <> "" THEN
sql = sql & concatWord & "busyo = '" & 部署 & "'"
concatWord = " AND "
END IF
IF 月 <> 0 THEN
sql = sql & concatWord & "m2 = " & 月
concatWord = " AND "
END IF
:

投稿日時 - 2015-04-19 11:41:15

お礼

ありがとうございました。
無事仕上げることが出来ました。

この様な変数の使い方があったんですね。

目から鱗です。

投稿日時 - 2015-04-20 00:50:17

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

データベースを作成する場合、「空白を許さない」ってのがありますので、必ず値が入ります。
もし、「月」が空白だったら、もし「13月」だったら、を検証し忘れるのが脆弱性となって現れます。
コーティング1/3、例外1/3、デバグ1/3と言います。面倒でも製品として仕上げるなら、入る前に考えうる例外処理をして欲しいと思います。
今回は「身長」という項目がありませんが、もし「3100mm」という値が来たら、体重「220t」という値が来たら、そんな常識ハズレな値が来たら・・・
部署は「総務部」と「層無部」は違います。「そんな、常識はずれな値を設定する訳ねーだろ」と言いますが、これをチェックしてません。

SQL文に入る前に、値が枠内に入っているか検査します。(私の場合)

勉強だと思って、検査ルーチンを書くことをオススメします。

投稿日時 - 2015-04-19 10:17:52

お礼

勉強になります。

空白をチェックすることで、エラーが防げました。

ありがとうございます。

投稿日時 - 2015-04-20 00:48:14

あなたにオススメの質問