|
>> 「Me.口座番号」というのは、「Me」テーブルの「口座番号」フィールド
>>という意味になります。
>> しかし、「口座番号」フィールドが所属しているのは
>>「利用者」テーブルであり、「Me」なんて名前のテーブルは存在しませんよね。
>> したがって、「『Me』テーブルの『口座番号』フィールド」
>>というフィールドは、存在しないフィールドです。
>> 上記の文字列中に「Me.」が入り込まないようにする必要があります。
>
>非常に混乱しております。
ここは、VBAとSQLは違うよということです。
イベントプロシージャのコードは、VBAというプログラミング言語で書かれています。
これに対し、Filterプロパティに設定する値、言い換えれば、strFilterに格納する値は、
SQLというプログラミング言語で書く必要があります。
SQLといっても、文法自体はかなり単純であり、
SQLでクエリを作るという経験がないと、
SQLが独自のプログラミング言語であるということ自体意識しにくいと思います。
しかし、VBAとSQLは全く異なる言語です。
そのため、VBAで使えた言葉がSQLでは使えないとか、
SQLで使えた言葉がVBAでは使えないといったことあります。
「Me」は、その例の一つであり、VBAでは「このフォーム」という意味ですが、
SQLでは特別の意味を持ちません。
また、SQLでは、「A.B」とあった場合、AテーブルのBフィールドという意味になります。
これ以外の意味を持つことはありません。
他方、VBAでは、「A.B」とあった場合、AテーブルのBフィールドという意味にはならず、
AオブジェクトのBプロパティとか、
Aオブジェクトに対するBメソッドとか、
Aオブジェクトの、(その下位概念である)Bオブジェクト
など幅広い意味を持ちます。
したがって、strFilterに格納された値(文字列)中に、
VBA用語である「Me」を入れてはいけないということです。
>If Not IsNull(利用者ID) Then
> strFilter = " AND " & BuildCriteria("利用者ID", _
> dbLong, 利用者ID)
>End If
本題ではありませんが、フィールドの名前とテキストボックスの名前を同じにするのは、
やめた方がいいと思います。
両者を混同してしまいがちだからです。
テキストボックスの名前は、元のとおり「txt_利用者ID」の方がいいと思います。
>If Not IsDate(利用開始日) Then
> strFilter = strFilter
>End If
2つの問題があります。
まず、「If Not IsDate(利用開始日) Then」ということの意味ですが、
「『利用開始日』テキストボックスの値が日付ではない場合」という意味になります。
この場合は、何もする必要はないわけですが、
これとは逆に、「利用開始日」テキストボックスの値が日付である場合には、
何か処理をする必要があるのではないですか。
次に、「利用開始日」テキストボックスに入力された値を使った抽出条件が書かれていません。
これでは、「利用開始日」テキストボックスや「利用終了日」テキストボックスに
どんな値を入力しても、それをフィルタに反映させることはできず、
「利用開始日」テキストボックスなどに入力した値を使ってのレコードの抽出はできません。
元の
>strFilter = strFilter & " AND Me.開始日 >= #" & Nz(Me.txt開始日) & "#"
というコードのうち、フィールド名のところだけを直せば良かったのに
(IF文も直す必要がありますが)。
> strFilter = Mid(strFilter, 6)
Mid関数の第2引数がなぜ「8」ではだめなのか、本件では「6」でなければならないのはなぜか
ということを御理解いただけたようで、何よりです。
|
|