• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンボボックスの抽出条件のLikeについて)

コンボボックスの抽出条件のLikeについて

このQ&Aのポイント
  • ACCESS2002でのフォーム内のコンボボックス処理において、抽出条件にLIKE関数を使用して値を抽出する方法について質問があります。
  • 現在、フォーム内で入力された値を抽出条件として、コンボボックスに表示したいと考えていますが、LIKE関数を使用しても値が抽出されません。
  • イコール演算子を使用すると値が抽出されることから、LIKE関数の使い方が間違っている可能性があると思われます。正しい使い方について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【要旨】 値集合ソースやクエリのSQL文では、  ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'") と、「'」は入れずに、  ((テーブル.カラム) like "*" & Forms!フォーム!テキスト1 & "*") としてください。 【詳細】 VBA上でSQL文を扱う場合や、DMaxなどの定義域集計関数の引数にする 場合は、確かに「*」と同時に「'」を使用しますが、クエリ(又は値集合ソースへの 直接入力)に使用する場合は「'」は使用せず「*」だけを指定します。 ちょっとわかりにくいかもしれませんが(汗)、完全一致の場合も、  ((テーブル.カラム) = "'" & Forms!フォーム!テキスト1 & "'" ) ではなく  ((テーブル.カラム) = Forms!フォーム!テキスト1 ) と、「'」を使用せずに指定しないと正しい結果が得られないのと同様と 考えて戴ければいいかと思います。 くどくなるのを承知で(汗)、さらに説明すると・・・ VBAでは、例えば「Me.氏名」に「鈴木」という値が入っていたとして、  strSQL = "Select * From テーブル1 Where 氏名 Like *" & Me.氏名 & "*;" という変数への記録を行った場合、実際のWhere句は  氏名 Like *鈴木* となって  氏名 Like "*鈴木*" とはなってくれません。  (「*」がワイルドカード文字ではなく乗算の演算子として扱われてしまう、と) これを防ぐため、VBA上でSQL文を扱う場合は、「'」を(又は「"」を重ねて) 使用する必要があります。 一方、クエリやSQL文を直接編集する場合は、  氏名 Like "*鈴木*" とか  氏名 Like "*" & Forms!フォーム!テキスト1 & "*" といったように、予め「*」を「"」で括って文字列(ワイルドカード文字)として 明示していることになります。 なので、逆にここに「'」を追加すると、その「'」まで「検索文字列」として 指定したことになってしまうので、意図した抽出結果が得られなくなる、 ということです。 ・・・以上、長くなりましたが、参考まで。 なお、余談になりますが、この「Like」は「関数」ではなく「演算子」になります。

すると、全ての回答が全文表示されます。

関連するQ&A