|
>If Not IsNull(Me.利用終了者) Then
> strFilter = "(" & strFilter & ") or [Yes/No型利用終了者]=True"
>End If
第1に、「利用終了者」というフィールドは存在しますが、
「Yes/No型利用終了者」というフィールドは存在しません。
単なる間違いですかね。
第2に、このコードだと、
「利用終了者」チェックボックスがFalseの場合でも、
「利用終了者」フィールドがTrueであるレコードが抽出されていまいます。
こんな動作で良いのでしょうか。
>Me.Filter = Mid(strFilter, 8)
以下は基本的なデバッグの方法の一つです。
このコードの直前の行に
Debug.Print "Mid関数前:" & strFilter
というコードを挿入し、直後の行に
Debug.Print "Mid関数後:" & strFilter
というコードを挿入してください。
次に、VBEにおいて、イミディエイトウィンドウを開いてください。
具体的には、VBEのメニューの「表示(V)」→「イミディエイト ウィンドウ(I)」
のコマンドを実行してください。
その上で、cmdFilter_Clickのイベントプロシージャを実行してみてください。
イミディエイトウィンドウに、「Debug.Print ××」のコードが実行された時点
におけるstrFilter変数に格納された値が表示されます。
それを見て、予定どおりの値になっているかよく確認してください。
同じことを角度を変えてお尋ねしますが、
「Mid(strFilter, 8)」の「8」は、なぜ「8」なのですか。
以下蛇足です。
>If Not IsNull(Me.利用終了者) Then
「利用終了者」チェックボックスのTripleStateプロパティは、
どのように設定されていますか。
おそらく、Falseが設定されていると思います。
そうだとすると、チェックボックスは、TrueかFalseのいずれかの値しか返さず、
Nullはありえません。
したがって、常に「If Not IsNull(Me.利用終了者) Then」の条件を
充たすことになります。
つまり、「If Not IsNull(Me.利用終了者) Then」という条件には、
意味がないということです。
>If Not IsNull(Me.txt開始日) Then
txt開始日に「2015/13/32」という値が入力された場合、これはNullでないので、
上記If文に該当することになります。
しかし、「2015/13/32」なんて日付はないので、
Filterプロパティへの代入のところでエラーになります。
そのため、IsNull関数の代わりにIsDate関数を使って、
有効な日付かどうかチェックした方がいいと思います。
>テーブル:利用者
>利用者ID(主キー):テキスト型
>請求コード:数値型
>利用施設:テキスト型(テーブル:施設のルックアップ)
>金融機関コード:数値型
>支店コード:数値型
>預金種目コード:数値型
>口座番号:数値型
>口座名義人:テキスト型
>住所:テキスト型
>連絡先:テキスト型
>備考:メモ型
>利用開始日:日付/時刻型
>利用終了日:日付/時刻型
>利用終了者:Yes/No型
施設利用についての情報と、利用者についての情報が混在しています。
それぞれ別テーブルに分けた方が良いでしょう。
例えば、次のとおりです。
「施設利用」テーブル
利用ID オートナンバー 主キー
施設ID 長整数型
利用者ID 長整数型
利用開始日 日付型
利用終了日 日付型
備考 メモ型
「利用者マスタ」テーブル
利用者ID オートナンバー 主キー
氏名 テキスト型
住所 テキスト型
連絡先 テキスト型
利用終了者 Yes/No型
金融機関コード、支店コード、預金種目コード、口座番号、口座名義人の
各フィールドですが、
利用者の預金口座を入力するのか、施設設営者の預金口座を入力するのか
わからなかったので、振り分けてはいません。
利用者の預金口座なら、これらのフィールドは「利用者マスタ」テーブルに設けることになると思います。
「請求コード」フィールドですが、
「利用者」テーブルに置くのではなく、
「請求」テーブルに長整数型の「利用ID」フィールドを設けるべきだと思います。
|
|