Microsoft Access 掲示板

フォームのフィルターをクエリに反映可能? / 7

19 コメント
views
4 フォロー
7
名前なし 2024/05/09 (木) 10:59:59 b4927@fc3ed

Dim strFilter As String

・String 型の変数の初期値は Null ではなく空文字列である。

・String 型の変数に Null を代入することは出来ない。

If Not IsNull(strFilter) Then

・したがって、上記の条件式の結果は常に True となる。

   If strFilter <> "" Then
      Me.FilterOn = True
   Else
      Me.FilterOn = False
   End If

・フォームの Filter プロパティに何らかの Where 条件が設定されていても、
 FilterOn プロパティが False である状態であればフォームフィルターは
 適用されず、レコードソースの全てのレコードが表示される。

Dim strSQL As String
strSQL = "SELECT * FROM テーブル名 Where " & Me.Filter & ";"
CurrentDb.QueryDefs("Q_Dummy").SQL = strSQL

・[ホーム]タブ上の[フォームの実行]ボタンや、フォームの移動ボタン上の
 [フィルター適用/フィルター処理なし]ボタンをユーザーがクリックすることによって
 フォームフィルターが解除され得ることを想定するのであれば、Filter プロパティの
 値が空文字列ではなく、かつ FilterOn プロパティの値が True である場合のみ、
 SQL に WHERE 句を付加するようにすることが望ましい。
 (でないと、フォーム上に全てのレコードが表示されているのに対し、
 クエリ側ではレコードの抽出が行われているという矛盾した状態となり得る)

Dim strSQL As String   
strSQL = "SELECT * FROM [テーブル名]"
If Me.Filter <> "" And Me.FilterOn = True Then
    strSQL = strSQL & " WHERE " & Me.Filter
End If
strSQL = strSQL & ";"
CurrentDb.QueryDefs("Q_Dummy").SQL = strSQL
通報 ...