MS Access Tips/Sample and VBA and Blog customize etc...

長音「ー」を含むデータをクエリであいまい抽出すると

クエリでLike演算子を使用してあいまい抽出すると合致しないデータが抽出されてしまうというバグがあります。それを知らないと想定外の結果になりあわせるということになりますので注意が必要です。

また、それに対する対応策も紹介します。

タイトル画像

難易度:

報告例

下記の質問で報告されてます。

クエリのワイルドカード検索で意図しない結果が返ってくる - マイクロソフト コミュニティ

過去にも、

Access2010クエリ抽出条件(Like) OKWave

両方共、私が回答してますが、前者で回答するときまったく忘れてまして、検索して自分が回答しているのにちょっと驚きました。

結構に致命的なバグだと思いますので、注意喚起と自分への備忘録の意味もこめてプログでとりあげます。

症状

検索される側のデータに長音(ー)を含むものがあると、発生します。

例えば、クエリで抽出条件を

Like "*AB*"

としたとき、

アイウABエオ

だけでなく、

アイウエAーBオ

アAイウエーBオ

まで抽出されてしまうという現象です。「A」と「ーB」を含むものがヒットしているようです。

ABの部分は、 かな、漢字などでも同様です。

不思議なことにVBA上では、正常に動作します。

VBA上での動作

対処法

Access2000から発生しています。このバージョンからUNICODE化されたのが怪しい。

現在の2013でも改善されていないのでこの先修正される可能性は低そうです。

Likeを使わずに、InStrで代用すれば正常に抽出できます。

フィールド式1: InStr([フィールド1],"AB")
抽出条件>0

あるいは、VBAでは正常に動作するようなので、Like演算子代替関数を作成してもいいでしょう。

標準モジュールに下記の関数を作成します。

クエリで、

フィールドILike([フィールド1],"*AB*")
抽出条件True
拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/455-fc51aab3
該当の記事は見つかりませんでした。