• ベストアンサー

フォームから複数条件を指定してクエリを開く

win10 、アクセス2016です フォームのテキストボックスに条件を記入して、この条件に基づき選択クエリ実行したいのですが、上手くいきません。 ご指導願います 条件入力フォーム名:フォームA 条件入力テキストボックス:txtMember 実際の入力条件:"日本 太郎" Or "東京 花子" クエリのデザインビューで[氏名]フィールの抽出条件:[Forms]![フォームA]![txtMember] これで選択が実行されません。 条件テキストを、直接デザインビューに入力すると上手くいきます。 何が、悪いのでしょうか。 ご指導よろしくお願いします。

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.7

クエリの抽出条件では無理だと思います。 > 条件テキストを、直接デザインビューに入力すると上手くいきます。 クエリをSQLビューで見れば分かると思いますが、 Access が 条件を編集しています。 Where フィールド1 = "日本 太郎" Or フィールド1 = "東京 花子" のような感じに。 テキストボックスを条件にすると 「"日本 太郎" Or "東京 花子"」という人を検索することになりますね。 どうしてもクエリが必要ということなら VBA でクエリのSQL を書き換える、くらいしか思いつきません。 フォームやレポートに結果を表示したり、レコードセットを取得するとかなら、方法はあります。 例はこちら。 複数選択リストボックスで選択したレコードの印刷 https://hatenachips.blog.fc2.com/blog-entry-452.html スペース区切りの複数ワードからWHERE句を組み立てるサンプル https://tsware.jp/tips/tips_623.htm あとは応用です。 以上、1つのテキストボックスに複数の検索条件を入力する場合の回答です。 解釈が間違っていたら後免。 No.1 さんの質問にきっちり答えていれば、もっと早く適切な回答が付いたでしょう。

kanade0216
質問者

お礼

ありがとうございました。 深いです。ちょっと簡単には理解できませんが、勉強します。 ありがとうございました。

その他の回答 (7)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

一つのテキストボックスで複数のキーワード検索をするという場合、 どうしても初心者の場合は、テキストボックスに   「"日本 太郎" Or "東京 花子"」 などと入力してデータを求めるということがありますが、 本来、クエリはその構造を確定させてから実行するものです。 したがって、抽出条件を複数にするならば、クエリの デザインビューであらかじめ設定しておく必要があります。 (1) 質問の"日本 太郎" Or "東京 花子"の「日本 太郎」と 「東京 花子」は二つの条件をOrで抽出したいということですが、 これら二つの条件は本来はパラメータとして設定するべき もので、たとえばクエリの抽出条件に、    [一番目の名前] Or [二番目の名前] と設定し、クエリを開くとパラメータのダイアログを現れ、 「一番目の名前」という表題のダイアログに「日本 太郎」 と入力し、OKを押すと「二番目の名前」という大ログが 現れ、「東京 花子」と入力すると「日本 太郎」と 「東京 花子」のデータが表示されます。この    [一番目の名前] Or [二番目の名前] という二つのパラメータをフォームに設定した二つのテキストボックス 「txtMember1」と「txtMember2」に置き換えると Like "*" & [Forms]![フォーム2]![txtMember1] & "*" Or Like "*" & [Forms]![フォーム2]![txtMember2] & "*" のように、抽出条件を設定します。 このようにするのが本来の(?)のというか最初の段階の複数条件でのクエリの 作成方法です。ここでは検索に何かと便利なあいまい検索にしてあります。 これだとフルネームでなくても「太郎」とか「日本」という語句を含む データが表示されます。ただし、一方でも入力がないとすべてのレコードが 表示されます。 ここまでが、第一段階+αです。 (2) 第二段階は、途端に面倒くさく、難しくなります。そこで質問に対する そのままの回答として、クエリのデザインビューで新しいフィールドに   Eval(BuildCriteria("'" & [氏名] & "'",10,"*" & Replace([Forms]![フォーム1]![txtMember],",","* Or *") & "*")) と、入れ、抽出条件に    -1 と入れ、保存します。クエリをデザインビューでもう一度 開き、表示にチェックが入っていればチェックをはずして 保存してください。 このときほかのフィールドに >クエリのデザインビューで[氏名]フィールの抽出条件:[Forms]![フォームA]![txtMember] などと入れないでください。フォームを開き、テキストボックスにカンマ切りで、      日本 太郎,東京 花子 と入力し、クエリを開けばデータが表示されます。 また、      日本 太郎,東京 花子,大阪 鯉太郎 と入力すれば、カンマ切りした語句のデータが表示されます。つまり、抽出の 条件をいくつでも設定できます。この場合は「Or」条件で設定しています。 これだけでは何をしているのか見当がつかないでしょうが、質問の回答としては これが一番簡単な設定です。 (3) ということで、三番目は・・・ということになれば、 質問の最初の回答の補足に、 >本当は、リストボックスより氏名を選択して、抽出しようとしています。 とのことでしたが、以下に似た質問の回答があります。まずは これを読んで理解できるかどうかです。 https://okwave.jp/qa/q6100323.html ほかにも、いくつかの検索に関する例は、 https://okwave.jp/qa/q5955866.html こちらは、(2)のBuildCriteriaという関数を用いた例、これが(2)の ところにくるようなものであるかもしれません。 https://okwave.jp/qa/q5465236.html まだ、たくさんありますが、わからないところがあれば補足して ください。

kanade0216
質問者

お礼

細かく、ご指導のほど、ありがとうございました。 一読では当方には理解に及びませんが、熟読して、理解してみます。 ありがとうございました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.6

補足です ★テーブルにはあなたがやろうとした機能【並び替え、条件抽出】は出来てます テーブルを実行形式で開いてください。 各項目名の右端の▼がそれです。 これをクリックすると確認できます。  ルックアップを定義すると画面高さまでのコンボボックスが可能です。  因みに私は48行で使っています。 ★メニューフォームのレコードソース を1レコードだけの  「プロフィール」テーブルとします。 ★プロフィールのフィールド ・会社名 ・住所 ・消費税率 ・期初月 ★非連結の日付関連ボックス ・基準日 ・月初日 ・月末日 ・期初日 ・期末日 これらのボックスは基準日が決まれば、他の日付はVBAで処理できます。 それではフォーム設計のQを楽しみにしてます。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.5

>[Forms]![フォームA]![txtMember].[Text]を ★[Forms]![フォームA]![txtMember]![Text]と変更して下さい。 ★最終的にはフォームAをメニューと改名して このフォーム上に 色々なボックスを配置して、これらのボックスのイベントで テーブル、クエリ、フォーム、レポートを開きます。 ※ ボックスはコマンドボタンに限らず ラベルボックス、コンボボックッス,テキストボックス等のイベントで開きます。 例えば「名簿登録」のラベルボックスのクリックイベントで 名簿登録フォームを開くには -------------------------------- Private Sub 名簿登録_Click() DoCmd.OpenForm "名簿登録" End Sub --------------------------------- ★アクセスファイルを開いたとき最初に開くフォームを一つ定義できます ファイル→オプション→現在のページ→ メニュー

kanade0216
質問者

補足

分かりました。 訂正して再度チャレンジしてみます。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

>(5)クエリのデザインビューで「実際の入力条件」の文字列を  直接打ち込むと、選択結果は、正しいレコードが選択されます。 ★これはクエリのフィールドのデータ型がテキスト型です  txtMemberのデータ型も同じテキスト型ですか

kanade0216
質問者

補足

テキスト型です。 適当かどうかわかりませんが、クエリでデザインで、 氏名フィールドの抽出条件に [Forms]![フォームA]![txtMember].[Text] としても同様に、抽出できません。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

>(4)クエリを開くとレコード数0となります。 ★[フォームA]に[フォームA]にテキストボックス[txtMember]がありますか  添付(1)  このフォームを開いて、このボックスに検索値()を入力した後クエリーを開きます  条件入力テキストボックス:txtMember  条件情報("日本 太郎" Or "東京 花子")を入力 ★クエリ  添付(2)  (3)フィールドを列にドラッグで展開しますが、   このようにワイルドカード(*)が使えます   氏名は検索条件設定の為の配置(*)と重複表示になるため   (5)のチェックを外します  クエリのデザインビューで[氏名]フィールの抽出条件:[Forms]![フォームA]![txtMember]   ここはコピペせずに、Forms!と入力してください、次の候補がListされます   このようにAccessには、ナビ機能があります。  (4)これ以下の行が検索条件設定に使います。   複数行に設定するとOr条件、複数の列に設定するとAnd条件                表示?を外せばフィールドを複数配置できる            条件はフィールド名の他 フィールド名+(<、=<、>、=>、<>)

kanade0216
質問者

補足

ご指導いただいた、とおりにしているはずなのでが・・・ どうしても、実現できません。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

>フォームのテキストボックスに条件を記入して、  この条件に基づき選択クエリ実行したいのですが、ご指導願います  条件入力フォーム名:フォームA  条件入力テキストボックス:txtMember  実際の入力条件:"日本 太郎" Or "東京 花子"  クエリのデザインビューで[氏名]フィールの抽出条件:[Forms]![フォームA]![txtMember]  これで選択が実行されません ★実行順序が間違えていませんか  1.フォームAを開く  2.txtMemberに検索値を入力  3.クエリを開く 尚、検索値を変更するとクエリを閉じて開き直す。

kanade0216
質問者

補足

申し訳ありません。ご指摘のおとりの順番で記述しているつもりです。 (1)フォームを開く (2)リストボックスの選択データが、テキストボックスに反映される. これは、上記質問の「実際の入力条件」のとおりとなります。 (3)すでに、クエリの条件は、当該フォームのコントロールを指定してます。 (4)クエリを開くとレコード数0となります。 (5)クエリのデザインビューで「実際の入力条件」の文字列を直接打ち込むと、選択結果は、正しいレコードが選択されます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の意味(下記)を、補足しておいた方がよいのでは。 質問表題からは、1名の名前を入れて、その名前で選択(SELECT)するのかと思ったが、質問本文では、"日本 太郎" Or "東京 華子"と2名、ないし複数名の例になっている。1つのテキストボックスに、複数名の名前を何かのDelimiterで区切って入れるのか?。また"”を入れるのか。 コンピュターの関連の質問は厳密に書かないとダメだよ。 普通は5個ぐらいの氏名のテキストボックスを作って、氏名を入れさせるのではないのかな。

kanade0216
質問者

補足

申し訳ありませんでした。 本当は、リストボックスより氏名を選択して、抽出しようとしています。 ですが実行しようとしてもできなかったので、あえてテキストボックスを作って、そこにリストボックスの選択氏名を記述してテストしています。

関連するQ&A

  • access クエリ 検索フォームの作り方

    よろしくお願いします。 やりたいこと: フォーム上で、テキストボックスに入力した値を検索して表示したい。 本やウェブで調べて、なんとか一度はやっと出来たのですが、 誤って何かを変更してしまい、使えなくなってしまいました。 今となってはどの資料を見て作れたのかわからなくなりました。 やったこと: クエリ :クエリA   条件にforms!フォームA!txt0を入力 フォーム:フォームA ヘッダーに非連結のテキストボックスtxt0を作成 txt0の更新後処理:docmd.requeryを入力 しかし、txt0に入力しても検索されません。 フォームのプロパティのレコードソース欄にクエリAを選択するようですが、 選択するクエリ名が表示されないので、クエリ名を入力しましたがダメでした。 どこか間違っているのでしょうか。VBAまでは勉強できないので上記範囲内でお願いします!

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • 選択クエリでの複数抽出条件の記述について

    フォーム上に「テキストボックス」、「コンボボックス」、「チェックボックス」の項目があって、それぞれの条件に合致した、データを抽出する選択クエリを書いてるのですが、うまく抽出してくれません。 「テキストボックス」、「コンボボックス」には、[Forms]![テーブル名]![入力するボックスの名前] or 、[Forms]![テーブル名]![入力するボックスの名前] is nullと記述しています。 「チェックボックス」には、、[Forms]![テーブル名]![チェックボックスの名前] = True or [Forms]![テーブル名]![チェックボックスの名前] = Falseと記述しています。 しかしながら、任意のコンボボックスからテキストを選択し、チェックボックスにレのついたデータを抽出したくても正しいデータを表示してくれません。 どなたか、クエリに詳しい方よろしくお願いいたします。

  • フォームからクエリの抽出期間を指定するにあたって

    フォームのテキストボックス(開始日付,終了日付)に入力された期間内の レコードをクエリで抽出するために、以下のような抽出条件を設定しています。 Between [Forms]![フォーム1]![from date] And [Forms]![フォーム1]![終了日付] ここまでは問題なく出来ています。 ですが、例えばテキストボックスに何も入力していないときに、 全ての期間から全件表示させるような方法はありませんでしょうか? IIf(IsNull([Forms]![フォーム1]![開始日付]),True,~ というような形で、IIfとIsNullの組み合わせも考えたのですが、 日付は直接フィールドでは無く抽出条件のため、 Trueより後が設定できずに悩んでおります。 出来ればVBAは使いたくないのですが、 何か良い方法はありませんでしょうか?

  • サブフォームを利用したクエリーの抽出条件について

    環境:ACCESS2003&XP Pro メインフォーム&サブフォームのフォームを作成しています。 このサブフォームにテキストボックスをつけ、このテキストボックスの値を抽出条件にしたクエリーを作成しましたが、抽出条件がうまくいかないようで クエリー実行時にパラメータを聞いてきます。 クエリーの抽出条件は forms![メインフォーム名].[サブフォーム名].[テキストボックス名] です。 上記の書き方がおかしいのだと思います。 よろしくお願いします。

  • ACCESS クエリの抽出条件

    毎度お世話になります。 クエリをレコードソースとするフォームから、コマンドボタンでアクションクエリを実行するときの抽出条件の書き方を教えて頂けないでしょうか? 二つのテーブル(別のACCESSファイルからリンク)を基にパラメータクエリを作っています。 そのクエリを基にフォームを作っています。 さらに、そのフォームに追加クエリを実行するボタンを置いています。 フォームに表示してあるレコードだけ(パラメータで抽出されたレコードだけ)、他のテーブルに追加しようと思っているのですが、実行ボタンを押すともう一度パラメータが出てきてしまいます。 多分テキストボックスの値を読み取る際にレコードソースがテーブルでないのが問題じゃないかと思うのですが。。。 テーブル:Container / Items クエリ:From_Con(パラメータは[Container]フィールド) フォーム:From_Con(テキストボックス名は[txtContainer]) 追加クエリ:From_Con_App(抽出条件は[Forms]![From_Con]![txtContainer]としてみたがうまく動きません。) デザインビューの抽出条件を使う方法? SQLを使う方法? QueryDefを使う方法? いろいろありそうですが、ネットで検索してもヒットしません。 分かりにくい説明で申し訳ありませんがご教授願います。

  • Accessのクエリ

    初めまして。Accessのクエリについての質問です。 Access2003を使っています。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。 今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

  • Accessクエリの抽出条件にフォームから挿入する方法

    Accessフォームのテキストボックスに入力されたデータを、クエリの抽出条件に挿入したいのですが、その際部分一致で検索したいため、抽出条件にLike "*[Forms]![フォーム名]![テキストボックス名]*"と記述したのですがうまく行きません。 どのように記述すれば部分一致で検索できるのかお教えください。

  • アクセス2000 複数の条件でクエリ作成

    アクセス2000を使用しています フォームを作成して テキストボックスを3つ、ボタンを1つ配置しています テキストボックスには番号、名前、名前ヨミをそれぞれ入力します 名前とヨミはあいまい検索をしたいのですが クエリの条件をどのように書けばいいでしょうか? 番号の条件 Forms!MAIN!番号 名前の条件 like "*" & Forms!MAIN!名前 & "*" ヨミの条件 like "*" & Forms!MAIN!名前ヨミ & "*" をそれぞれ または で記入したのですがうまく抽出されません たとえば、番号のところに何か入力しても残りの2つが空白であるためにあいまい検索なので全てという認識で抽出をかけているのだと思います どのように条件を書けばうまく抽出されるでしょうか

  • ACCESS VBA フォーム複数条件

    ACCESSフォーム内のテキストボックスが空欄かどうかで条件分岐させる方法を教えてください。 フォーム内に複数テキストボックスがあります。 テキスト1 テキスト2 テキスト3 このテキストボックスの入力があるかどうかで、 エクスポートするクエリを変更したいです。 それぞれのテキストボックスの入力値は、 対応するクエリの抽出条件になっています。 少なくとも、テキスト1には入力があるという条件で、 ・テキスト2が空白なら、クエリ2を出力する ・テキスト3が空白なら、クエリ3を出力する という処理を行いたいのです。 マクロビルダーで、IFを使った処理は作ることができたのですが、 VBAを使って、同じ処理ができるようにしたいです。 どうかご教授のほど、よろしくお願いします。

専門家に質問してみよう