使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
> コンボボックスのプロパティ シートにてデータ
> 値集合ソース (値リスト)に 絞り込む一致内容を入力しています。
> コンボックスの値集合ソースには 「すべて 終了 未」 を入力
> 今回の変更点は データベース項目の資格取得日(日付)に対して
> データに日付が入力されていれば、終了。
> データに日付が入っていなければ、未 と言った状態に
> 一度変換して検索抽出を行いたいのですが、
・ある帳票フォームのフォームヘッダーセクション上に
[資格選択]という名前の非連結コンボボックスが配置されている。
・[資格選択]の値集合タイプは値リストであり、
[値集合ソース]プロパティには "すべて;終了;未" という
リストが設定されている。
・そのフォームのレコードソースであるテーブル/クエリには
[資格取得日]という名前の日付/時刻型のフィールドが含まれている。
・フォームヘッダーセクション上に配置されている
コマンドボタン(名前は不明)がクリックされた時、
その時の[資格選択]の値に応じて、以下のいずれかの
抽出処理を実行する。
1) [資格選択]の値が "終了" である場合
-> [資格取得日]の値が Null ではないレコードを抽出する条件式を追加する。
2) [資格選択]の値が "未" である場合
-> [資格取得日]の値が Null であるレコードを抽出する条件式を追加する。
3) 上記以外の場合([資格選択]の値が "すべて" である場合を含む)
-> [資格取得日]に対する条件式を追加しない。
こういうことでしょうか。
> If flgJoken = True Then
> strJoken = strJoken & " and 資格取得日 = """ & Me.資格選択.Value & """"
> Else
> strJoken = "資格取得日 = """ & Me.資格選択.Value & """"
> End If
>実行してみると、実行時エラー 3464 抽出条件で型が一致しません。
"終了" や "未" のような文字列リテラルを
日付/時刻型のフィールドと比較する
(両辺のデータ型が一致していない)式を用いて
フォームフィルターを実行しようとしているからです。
Select Case Me.資格選択
Case "終了"
If strJoken <> "" Then
strJoken = strJoken & " And "
End If
strJoken = strJoken & "[資格取得日] Is Not Null"
flgJoken = True '何に使うのかは知らない
Case "未"
If strJoken <> "" Then
strJoken = strJoken & " And "
End If
strJoken = strJoken & "[資格取得日] Is Null"
flgJoken = True '何に使うのかは知らない
Case Else
'何もしない
End Select
Me.Filter = strJoken
Me.FilterOn = (strJoken <> "")
なお、今回のような処理にはあまり関係していませんが、
日付/時刻リテラルを記述する際の囲み文字は # です。
(記述例)
strJoken = "[資格取得日] = #2021/04/14#"