Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


528 / 9994 ←次へ | 前へ→

【12777】Re:複数抽出
回答  かるびの  - 15/3/26(木) 2:26 -

引用なし
パスワード
   >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関数の引数に何を指定したらよいか考えてみてください。

520 hits

【12753】複数抽出 ゆか 15/3/23(月) 15:21 質問[未読]
【12756】Re:複数抽出 かるびの 15/3/24(火) 4:22 回答[未読]
【12758】Re:複数抽出 ゆか 15/3/24(火) 14:14 質問[未読]
【12764】Re:複数抽出 かるびの 15/3/25(水) 2:08 回答[未読]
【12775】Re:複数抽出 ゆか 15/3/25(水) 18:56 質問[未読]
【12777】Re:複数抽出 かるびの 15/3/26(木) 2:26 回答[未読]
【12782】Re:複数抽出 ゆか 15/3/28(土) 17:08 質問[未読]
【12783】Re:複数抽出 かるびの 15/3/29(日) 2:09 回答[未読]
【12787】Re:複数抽出 ゆか 15/3/30(月) 20:51 質問[未読]
【12790】Re:複数抽出 かるびの 15/3/31(火) 2:43 回答[未読]
【12793】Re:複数抽出 ゆか 15/3/31(火) 22:23 お礼[未読]

528 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free