Microsoft Access 掲示板

検索コンボボックスの選択肢追加 / 10

17 コメント
views
4 フォロー
10

現状のファイルを送信フォームから送ってもらった方が速そうです。

通報 ...
  • 12
    cerophan 2020/08/07 (金) 23:19:54 0029a@1c915 >> 10

    何度も連投してしまい、申し訳ありません。自己解決する度、お答えする手間をかけないようにと思って都度都度投稿してしまっておりました…
    現状のファイルをお送りしたい気持ちは山々なのですが、難しい状況です。
    お言葉、ありがとうございます。

    今回の件は、下記で解決とすることにしました。
    大変お騒がせしました。

    ★降順にしていたものを昇順としたが、その他の問題は解決。
    【値集合ソース】
    SELECT DISTINCT "(空欄)" AS 年月
    FROM T_案件
    WHERE (((T_案件.年月) Is Null))
    UNION SELECT DISTINCT T_案件.年月
    FROM T_案件
    WHERE (((T_案件.年月) Is Not Null));

    13

    簡単なサンプルを作成してみました。
    下記のリンクでダウンロードできます。

    案件管理.zip

    14

    サンプルの解説

    テーブル T_案件 に 日付/時刻型の「年月日」フィールドがある。
    「年月日」は未入力(NUll)のレコードもある。

    上記のテーブルから帳票フォームを作成する。
    フォームヘッダーにコンボボックスを「cbo年月」を配置する。

    値集合ソース

    SELECT DISTINCT
     Format(Format([年月日],"yyyy/mm"),"&;""(空欄)""") AS 年月,
     [年月日] Is Null AS N
    FROM T_案件
    ORDER BY 2, 1 DESC; 
    

    テーブルに未入力のレコードが存在するのでユニオンクエリにする必要はなかったです。
    Format([年月日],"yyyy/mm") で年月日を年月に変換、
    さらに Format(・・・,"&;""(空欄)""") をかぶせることで、Nullを(空欄)に変換。

    (空欄)を先頭に持ってくるようにするために、[年月日] Is Null AS N というフィールドを追加

    ORDER BY 2, 1 DESC;
    の数字は何列目かを指定しています。下記と同じ意味になります。
    ORDER BY [年月日] Is Null, Format(Format([年月日],"yyyy/mm"),"&;""(空欄)""") DESC;
    フィールドの式が長いときは簡略化できるので便利です。


    cbo年月の更新後処理のイベントプロシージャ

    Private Sub cbo年月_AfterUpdate()
        If Nz(Me.cbo年月) = "" Then
            Me.Filter = ""
            Me.FilterOn = False
        ElseIf Me.cbo年月 = "(空欄)" Then
            Me.Filter = "年月日 Is Null"
            Me.FilterOn = True
        Else
            Me.Filter = "年月日>=#" & Me!cbo年月 & "# AND 年月日<#" & _
                         DateAdd("m", 1, Me!cbo年月) & "#"
            Me.FilterOn = True
        End If
    End Sub
    

    cbo年月 が未選択の時は全件表示、
    "(空欄)"を選択したときは年月日が空欄のレコードを抽出、
    年月を選択したときは、その年月のレコードを抽出。

    年月でフィルターをかける時、
    Me.Filter = "Format([日付],"yyyy/mm")='" & Me!cbo年月 & "'"
    とした方がコードは短くなるが、インデックスが無効になるので、処理を軽くしたい場合は上のコードのように年月日フィールドに直接条件を設定するようにしたほうがよい。
    詳細は下記参照。

    抽出条件でインデックスが無効になる場合 - hatena chips

    15
    cerophan 2020/08/08 (土) 07:44:28 0029a@1c915 >> 12

    とても丁寧な解説、本当にありがとうございます。じっくり読み解きたいと思います。心から感謝申し上げます。

    16
    セロハン 2020/08/08 (土) 10:06:09 0029a@1c915 >> 12

    内容確認しました!とても勉強になりました。
    「抽出条件でインデックスが無効になる場合」につきましては、また新しい知識なので勉強したいと思います。インデックスもいまいち理解できていなかったので貴重なお話をありがとうございます。

    17

    データ数が多くて処理が重く感じた時点で、インデックスを付けることを検討するということでもいいです。
    インデックスとは、百科事典・学術書などの最後についている索引のようなものと考えればいいでしょう。
    それが、あると検索や抽出が高速になります。