プロが教える店舗&オフィスのセキュリティ対策術

Me.FilterOn = True は先でも後でも問題ないですか?

アクセスのvbaでフォームにフィルタをかけるときに
今まで
---------------------------------------
Private Sub コマンド2_Click()
Me.Filter = "フィールド = '" & "test" & "'"
Me.FilterOn = True
End Sub
---------------------------------------
とコードを書いていましたが
---------------------------------------
Private Sub コマンド2_Click()
Me.FilterOn = True
Me.Filter = "フィールド = '" & "test" & "'"
End Sub
---------------------------------------
でも機能しました。

という事は、
Me.FilterOn = Trueは
Me.Filter の前でも問題ないのでしょうか?

Me.FilterOn = Trueは
Me.Filter の後と習ったので疑問に思っています。
よろしくお願いいたします。

A 回答 (1件)

興味もあって2007でやってみました。




私の今までの書き方)

  If (Len(sWhereCondition) = 0) Then
    Me.FilterOn = False
    Me.Filter = ""
  Else
    Me.Filter = sWhereCondition
    Me.FilterOn = True
  End If

ここで、

Me.FilterOn = False 状態の時、Me.Filter を変更しても何も起きません

Me.FilterOn = True 状態の時、
・ Me.Filter を変更すると、再クエリが発生しました
・ Me.FilterOn = True を再設定しても再クエリされませんでした

Me.FilterOn = False 状態の時、
    Me.Filter = sWhereCondition
    Me.FilterOn = True ' ★

    Me.FilterOn = True ' ★ ' ☆
    Me.Filter = sWhereCondition ' ★

の記述にすると ★ で再クエリが発生しました。
ただ、☆ 時に Me.Filter = "" なら True にはなりませんでいた。
True にならない可能性があるので、

    Me.Filter = sWhereCondition
    Me.FilterOn = True

が正しい順と思われます。

Me.FilterOn = True 状態の時、
    Me.Filter = "" か Me.FilterOn = False でフィルタ解除されました。
Me.FilterOn = False 時に Me.FilterOn = False しても変化はありませんでした。
ただ、Me.Filter = "" とすると自動で Me.FilterOn = False に変化。
また、Me.Filter = "" 時に Me.FilterOn = True にはできませんでした。

これらの動きをまとめてみると、

    Me.Filter = sWhereCondition ' ★1
    Me.FilterOn = True ' ★2

だけで良さそうです。
(sWhereCondition = "" なら FilterOn は自動で False になって True にできない)
Me.FilterOn = True 状態の実行では、★1で再クエリ
Me.FilterOn = False 状態の実行では、★2で再クエリ
てな動きになるのでしょうか・・・


なので、ご質問への回答としては、

Me.FilterOn = True
Me.Filter = "フィールド = '" & "test" & "'"

と記述すると、
実施前 Me.Filter = "" であれば、フィルタはかからない。
実施前 Me.Filter = "" でなければ、最悪2回再クエリすることになる。
(実施前 Me.FilterOn = False だったら2回)
(実施前 Me.FilterOn = True だったら1回)
という事になるのでしょうか。


※ 私の環境でのものなので、検証はしてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました!!!

お礼日時:2011/10/29 23:56

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A