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

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

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

フォーム内のコンボボックス処理について 現在ACCESS2002でDBを構築しております。 初心者です。 フォーム内でテキストボックスから値【a】をもらい、その【a】を抽出条件として抽出結果を コンボボックスに表示したいと考えております。 ※like関数を使用 Private Sub テキスト1_AfterUpdate() DoCmd.Requery "コンボ1" Me!テキスト1.Requery End Sub コンボボックスの値集合ソースの抽出条件で ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'") 上記で指定したのですが、何も抽出されません。 イコールで下記を実行すると値は抽出されます。 ((テーブル.カラム) = Forms!フォーム!テキスト1 ) 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

  • サブフォームでのテキストとコンボ連動について

    ACCESS2002でDBを構築している初心者です。 メインフォームに2つのサブフォーム(サブ1、サブ2)埋め込みを サブフォーム同士を連動させたフォームを作成中です。 2つのサブフォームのうちのサブ1にテキストボックスを基に コンボボックスでSQLを実行して抽出結果を コンボボックスに表示させています。 下記でaの値が変更されるとbにその値を送っています。 Private Sub a_AfterUpdate() DoCmd.Requery "b" Me!a.Requery End Sub その後bの値集合ソースでSQLを実行しております。 SQLの抽出条件「forms!サブ1!a」として、上記で取得した テキストボックスaを使用しております。 サブ1をメインフォームで開き上記を実行すると値を抽出します。 しかしサブフォームで実行した際に、「パラメータの入力」が 出てきて手動で入力しなくてはいけません。 サブフォーム上で実行する際に、イベントプロシージャや SQLの抽出条件を更新しなくてはならないのでしょうか。 お手数おかけいたしますが、ご教授よろしくお願いいたします。

  • コンボBOXで抽出した値をテキストBOXに表示したい

    入力用フォームで注文フォームを作成しているのですが、コンボBOXで商品Noを抽出し、テキストBOXに商品名を表示したいのですが、 Private Sub コンボ1_AfterUpdate() Me!テキスト1 = Me!コンボ1.column(1) End Sub と入力したのですが、他の行にも同じ商品名が表示されます。 商品NoをコンボBOXで指定し、数量を手入力という入力フォームを作成したいのです。 作成方法を教えてください。 よろしくおねがいします

  • フォームのコンボボックスのチェンジイベントがエラー

    フォームのコンボボックスのチェンジイベントがエラーになってしまいます フォームのコンボボックスで値が変更するたびに コンボックスのリストを絞り込むようにしたいので フィールド1 1111 1112 1113 1211 1212 フォーム1を作成しコンボボックスを設置し 値集合ソースを SELECT テーブル1.フィールド1 FROM テーブル1 WHERE (((テーブル1.フィールド1) Like "*" & [テーブル1]![フィールド1] & "*")); として コンボボックスの変更時イベントに Private Sub コンボ0_Change() Form_フォーム1.コンボ0.Requery End Sub としました。 そしてこのコンボボックスに 「2」というように値を入力すると 「実行時エラー '2118' "Requery/再クエリ"アクションを実行する前に、カレンとフィールドを保存する必要があります。」 となってしまいます。 やりたいことは コンボボックスに「2」を入力すれば テーブル1の「2」が含まれるものが抽出され 1112 1211 1212 がコンボボックスの ▼マークをクリックした後のリストに表示されるようにしたいのですが どうすればいいでしょうか? よろしくお願いします。

  • フォームのテキストボックスを抽出条件とするクエリー

    Access2003を使って、「フォームのテキストボックスを抽出条件とするクエリー」 を作成していて困っています。 まず Like [Forms]![顧客氏名検索]![テキスト2] とすると、完全一致したものだけが抽出できています。そこで 【値の一部が一致】 Like "文字列*"   ※文字列にある文字列を直接入力するとちゃんと抽出できる。 これを参考に Like "[Forms]![顧客氏名検索]![テキスト2]*" とすると、値の一部が一致するものが抽出されません。(何を入力しても該当0件) 抽出条件が正しく設定されてないように思います。 フォームのテキストボックスの値を利用する場合、""や*の使い方がおかしいのでしょうか?

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

  • ACCESSのクエリー抽出条件にIIFを使用して

    コンボボックスの値を抽出条件にしたクエリーを作成しています。 コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、 以下の式を入れたのですが全表示がされません。 IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値]) Like "*" の部分がいけないのでしょうか? (偽の場合は選択した値のレコードが抽出されます) どなたか教えてください、よろしくお願いいたします。

  • コンボボックスの抽出の解除

    ACCESS 2000 OS:Win 2000を使ってます。 フォーム内にコンボボックスを作って、フォームのキーとなるコードでコンボボックスに出てくる値を毎回変えるようにしています。 ただ、あらかじめデータの入っているものならいいんですが、新規のデータを入力したときには、コンボボックスの値が何も出なくなります。 原因としては、データが確定されていない状態だからだと思うのですが、これをどうにかして新規のデータの際もキーとなるコードでコンボボックスに出る値を抽出できないでしょうか? きっとVBAが書けたらできるかな~と思うのですが、VBAを触り始めたばかりで分かりません。 以下にコンボボックスに設定している抽出条件を表記しておきます。 どなたかご教授お願いします。 コンボボックスの値集合ソースには SELECT [T派遣先担当者マスタ].[派遣先担当者CD], [T派遣先担当者マスタ].[派遣先担当者名], [T派遣先担当者マスタ].[派遣先担当者役職] FROM T派遣先担当者マスタ WHERE ((([T派遣先担当者マスタ].[契約先CD])=[Forms]![F派遣状況記録]![契約先CD])); と書かれています。 そしてこれだと、データが移った際にコンボボックスの値が更新されないので、 Private Sub Form_Current() Me![責任者CD].Requery End Sub でリクエリをしています。

  • ACCESSでコンボボックスにSQLで抽出した値を表示したい

    いつもお世話になっております。 ACCESS初心者です。 テキストボックスに入力したフリガナから、あいまい検索させ抽出した ものをコンボボックスに表示させたいのですが、うまくいきません。。 (コンボボックスに何も表示されないです) 過去の質問やネット検索でも調べたのですがイマイチ分かりませんでした。 どなたか詳しい方、ご教示いただけると嬉しいです。 OS:windowXP ACCESS:Ver2003 Private Sub テキストボックス名_Afterupdate() Me.コンボボックス名.RowSource = "SELECT フィールド名 FROM テーブル名 WHERE フリガナ LIKE '" & Me!テキストボックス名 & "*';" End Sub どうぞよろしくお願いいたします。

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

  • コンボボックスでのサブフォーム抽出について

    コンボボックスでのサブフォーム抽出について教えて下さい。 T_支払というテーブルにてSUBフォームを作り、メインフォームに貼り付けてます。 コンボボックスにて月度を選択すると、その月の一覧がSUBフォームに表示する様にしたい のですが、今一わかりません。 途中までフォームの形はできたのですが、そこから止まってしまっています。 この先何をすればよいのか教えていただけないでしょうか? ほぼ初心者なものでよろしくお願いします