dポイントプレゼントキャンペーン実施中!

access初心者です。
現在あるフォームの解析をしていて、strWhereがわからず先に進めません。
strWhereで検索すると文字列変数で使われるということはわかったのですが、下記の意味がわかりません。。どなたかご教授ください。

strWhere = ""

strWhere = strWhere & "フィールドA <= '" & テキストボックス & "'"

質問者からの補足コメント

  • strWhere = "" が変数の初期化ということはわかりました。しかし、他の変数ではこの初期化を行っていないのです。strWhereは初期化しなくてはならないというルールがあるのですか?

      補足日時:2018/02/09 15:53

A 回答 (2件)

今提示されている2行だけなら、初期化の必要はありません



ですが、「初期化の必要が無い:」ことは「初期化を使ってはダメ」とイコールではありません。


他の行との兼ね合いで、初期化した方が好ましい、初期化しないと問題、というケースも考えられます。
1バイト単位でしのぎを削る分野ならともかく、AccessのVBAのような余裕のあるところでは、あえて「無駄」なことをすることがあります。





例えば

strWhere = ""
strWhere = strWhere & "フィールドA <= '" & テキストボックス & "'"
strWhere = strWhere & " AND "
strWhere = strWhere & "フィールドB >= '" & テキストボックス2 & "'"

と続いていた場合、初期化を無くすと

strWhere = "フィールドA <= '" & テキストボックス & "'"
strWhere = strWhere & " AND "
strWhere = strWhere & "フィールドB >= '" & テキストボックス2 & "'"

となり、文字列の開始位置がずれて、見にくくなります。
後で見なおすことを考えると、見た目も重要です。

フィールドAは不要みたいだからコメントアウトしておこう、となると

' strWhere = "フィールドA <= '" & テキストボックス & "'"
' strWhere = strWhere & " AND "
strWhere = strWhere & "フィールドB >= '" & テキストボックス2 & "'"

となり、ここに来る時点で strWhere="" になっていない場合、そのまま連結されてしまいます。
確実にフィールドBだけにするには

' strWhere = "フィールドA <= '" & テキストボックス & "'"
' strWhere = strWhere & " AND "
strWhere = "フィールドB >= '" & テキストボックス2 & "'"

となります。
ここで、やっぱりフィールドAも必要だった、とコメントアウトから回復させると

strWhere = "フィールドA <= '" & テキストボックス & "'"
strWhere = strWhere & " AND "
strWhere = "フィールドB >= '" & テキストボックス2 & "'"

と、フィールドBで上書きされてしまうので、コマント解除した意味がありません。


以上のことは、strWhere = "" を残したままにすると、コメントアウト/解除だけで期待通りに動いてくれます。

もし、その2行しか無いケースでも、将来条件が増えることを予想して、あらかじめ対応しておいたものかもしれません。
    • good
    • 0
この回答へのお礼

助かりました

kmeeさん

見た目をわかりやすくするためと、コード変更に対応しやすくするため、と理解できました。
丁寧に解説して頂きありがとうございました!

お礼日時:2018/02/11 09:25

変数名が、何か特殊な意味を持ってそうに見えるかもしれませんが、


考え過ぎです。

strWhere を aaaaa に置換しても、多分ちゃんと動きます。

strWhere = strWhere & ...
とあるので、おそらく、
◯最初は空文字列
◯テキストボックスに文字が入っていたら、
その条件でレコードの絞り込むための文字列を追加

という事をしているのでは。
    • good
    • 0
この回答へのお礼

kmeeさん
ありがとうございます!

strWhere = "" ←この行を無くして、

strWhere = "フィールドA <= '" & テキストボックス & "'"

だけではダメなんですか?

お礼日時:2018/02/10 09:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!