|
かるびの様
ご多忙の中、返信ありがとうございます!
> 第1に、「利用終了者」というフィールドは存在しますが、
>「Yes/No型利用終了者」というフィールドは存在しません。
> 単なる間違いですかね。
他のところで、「Yes/No型〇〇〇」と書いてあったので、
書く必要があるものだと思っていました…。
> 第2に、このコードだと、
>「利用終了者」チェックボックスがFalseの場合でも、
>「利用終了者」フィールドがTrueであるレコードが抽出されていまいます。
> こんな動作で良いのでしょうか。
Falseの場合はFalseのみ、TrueのときはTrueのもののみ抽出できるようにしたいです。
>>Me.Filter = Mid(strFilter, 8)
> 以下は基本的なデバッグの方法の一つです。
>
> このコードの直前の行に
> Debug.Print "Mid関数前:" & strFilter
>というコードを挿入し、直後の行に
> Debug.Print "Mid関数後:" & strFilter
>というコードを挿入してください。
>
> 次に、VBEにおいて、イミディエイトウィンドウを開いてください。
>具体的には、VBEのメニューの「表示(V)」→「イミディエイト ウィンドウ(I)」
>のコマンドを実行してください。
>
> その上で、cmdFilter_Clickのイベントプロシージャを実行してみてください。
>
> イミディエイトウィンドウに、「Debug.Print ××」のコードが実行された時点
>におけるstrFilter変数に格納された値が表示されます。
>
> それを見て、予定どおりの値になっているかよく確認してください。
予定通りの値には、なっておりませんでした・・・。
やはり
Me.Filter = Mid(strFilter, 8)でひっかかり、イミディエイトウィンドウには
Mid関数前: AND Me.txt利用者ID=100250001 AND Me.開始日 >= ## AND Me.終了日 <= ##と表示されています。因みに
>>If Not IsNull(Me.txt開始日) Then
> txt開始日に「2015/13/32」という値が入力された場合、これはNullでないので、
>上記If文に該当することになります。
> しかし、「2015/13/32」なんて日付はないので、
>Filterプロパティへの代入のところでエラーになります。
> そのため、IsNull関数の代わりにIsDate関数を使って、
>有効な日付かどうかチェックした方がいいと思います
上記で教えていただいたように、IsNullをIsDateに変更させていただきました。
> 同じことを角度を変えてお尋ねしますが、
>「Mid(strFilter, 8)」の「8」は、なぜ「8」なのですか。
色々な所でMid(strFilter, 6)が使われていたのですが、
フィルター項目が6項目の物ばかりだったので、項目数の数だと思い
フィルター項目が8あったので、8にしてみました!
> 以下蛇足です。
>>If Not IsNull(Me.利用終了者) Then
> 「利用終了者」チェックボックスのTripleStateプロパティは、
>どのように設定されていますか。
> おそらく、Falseが設定されていると思います。
> そうだとすると、チェックボックスは、TrueかFalseのいずれかの値しか返さず、
>Nullはありえません。
> したがって、常に「If Not IsNull(Me.利用終了者) Then」の条件を
>充たすことになります。
> つまり、「If Not IsNull(Me.利用終了者) Then」という条件には、
>意味がないということです。
トリプルステートは、仰る通り「いいえ」になっていました。
そうなんですね!そういう意味だということを初めて知りました。
教えて下さり、ありがとうございます!
> 施設利用についての情報と、利用者についての情報が混在しています。
> それぞれ別テーブルに分けた方が良いでしょう。
> 例えば、次のとおりです。
>
やはり分けたほうが宜しいのですね。
当初は何個かに分けていたのですが、
いまいちリレーションシップを作成する際に
一対多がいまいちわからなくなり、
一つのテーブルにまとめちゃったのが宜しくなかったのですね。
リレーションをマスターして、次回からはきちんと組めるように努めます!
|
|