|
>Is date関数って=dateと同じだったんですね!
>「Is Date
>式を日付に変換できるかどうかを調べ、結果をブール値で返します。」
>strFilter = strFilter & " AND Me.終了日 <= #" & Nz(Me.利用終了日) & "#"
>が何をいれてみたらよいかが見当もつきませんでした。
第1に、IsDate関数ですが、Is と Date の間にスペースは入りません。
第2に、IsDate関数とDate関数は、機能が全然異なる関数です。
第3に、IsDate関数がどのような働きをするものなのかを把握するため、
次の操作を行ってみてください。
イミディエイトウィンドウにカーソルを移し、
? IsDate("2015/3/25")
と手入力し、エンターキーを押してみてください。
次の行にIsDate関数の返り値が表示されます。
? IsDate("2015/13/32")
とか
? IsDate("あいう")
とか
? IsDate("")
とか
? IsDate(Null)
も試してみてください。
どういうときにTrueになり、どういうときにFalseになるか確認してください。
第4に、IsDate関数を使うとすれば、
「If Not IsNull(Me.txt終了日) Then」とのコードで使います。
「strFilter = strFilter & " AND Me.終了日 <= #" & Nz(Me.利用終了日) & "#"」
のコードでは、IsDate関数は使いません。
>Mid関数も調べてみました。
>ということだったので、文字数の最大値を設定すればいいってことで
>宜しいでしょうか?理解力が低くて申し訳ありません。
違います。
イミディエイトウィンドウに
? Mid("あいうえおかきくけこ",2)
と手入力し、エンターキーを押してください。
次の行にMid関数適用の結果が表示されます。
? Mid("あいうえおかきくけこ",5)
とか
? Mid("あいうえおかきくけこ",9)
も実行してみてください。
その上でヘルプの説明をもう一度読み直してみてください。
これでMid関数が何をする関数なのかイメージがつかめると思います。
>Mid関数前: AND Me.口座番号=843803 AND Me.口座名義人 Like '**' AND Me.利用者名 Like '**' AND Me.利用施設 Like '**'
2つの問題点があります。
まず、一つめ。
問題となるのは「Me.」です。
「Me.口座番号」というのは、「Me」テーブルの「口座番号」フィールド
という意味になります。
しかし、「口座番号」フィールドが所属しているのは
「利用者」テーブルであり、「Me」なんて名前のテーブルは存在しませんよね。
したがって、「『Me』テーブルの『口座番号』フィールド」
というフィールドは、存在しないフィールドです。
上記の文字列中に「Me.」が入り込まないようにする必要があります。
二つめ。
例えば、「Me.口座名義人 Like '**'」です。
「*」が二つ連続してしまっている点が問題です。
そうならないようにするために、「If Not IsNull(Me.txt口座名義人) Then」
という条件分岐を入れているわけですが、
txt口座名義人の値が長さ0の文字列である場合、それはNullではないので、
条件成就となり、
「strFilter = strFilter & " AND Me.口座名義人 Like '*" & Me.txt口座名義人 & "*'"」
というコードが実行され、strFilter中に「Me.口座名義人 Like '**'」という
文字列が含まれてしまうわけです。
「If Not IsNull(Me.txt口座名義人) Then」に加えて
「txt口座名義人の値が長さ0の文字列でない場合」という条件を付加する必要があります。
もっとも、「口座名義人 Like '**'」という抽出条件だと、
口座名義人フィールドがNullでないレコードが全て抽出されるので、
この点についての対策を取らなくても、今回に限っては問題ないと思います。
>Mid関数前: AND Me.口座番号=843803 AND Me.口座名義人 Like '**' AND Me.利用者名 Like '**' AND Me.利用施設 Like '**'
>Mid関数後:座番号=843803 AND Me.口座名義人 Like '**' AND Me.利用者名 Like '**' AND Me.利用施設 Like '**'
Mid関数前は「 AND Me.口座番号=843803・・・」だったものが、
Mid関数後には 「座番号=843803・・・」となってしまっていますが、
その理由は、上記のイミディエイトウィンドウを使った実験により、
もうおわかりですよね。
それがわかれば、「strFilter = Mid(strFilter, 8)」において
Mid関数の引数に何を指定したらよいか考えてみてください。
|
|