- ベストアンサー
クエリーの抽出について
今回初めて質問させていただきます。 所持しているゲームソフトが増えてきたので、ACCESSで管理したいと思いました。 テーブル、追加クエリー等は作成したのですが、フォーム上でメーカー名と頭文字という二つのテキストボックスを作成し、クエリーにて FORM!検索フォーム!テキストボックスという感じで作成し、抽出をしようとしたところ、両方のテキストボックスに検索条件を入力しないと抽出されないことに気づきました。 これを、一つの検索条件を入力した時にも抽出できるようにできませんか?説明がわかりにくいかもしれませんが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です えっと、SQL文を見てて、悩んでるのですが、追加クエリなのは、なぜ? で、条件が4つあると言うことで、Nz関数を使った場合、4つとも入力しないと、すべて出てくると言う抽出されない状態が出来上がりますので、複雑に条件を組んで行く他、無いでしょうね INSERT INTO ゲーム名ワーク1 ( メーカー, ゲーム名, ゲーム名(カナ), 頭文字(かな), 枚数, ジャンル ) SELECT メーカー, ゲーム名, ゲーム名(カナ), 頭文字(かな), 枚数, ジャンル FROM ゲーム名テーブル WHERE ((メーカー = [FORMS]![ゲーム検索フォーム]![メーカー名1] OR [FORMS]![ゲーム検索フォーム]![メーカー名1] Is Null AND [FORMS]![ゲーム検索フォーム]![頭文字] Is Not Null) AND (頭文字(かな) = [FORMS]![ゲーム検索フォーム]![頭文字] OR [FORMS]![ゲーム検索フォーム]![メーカー名1] Is Not Null AND [FORMS]![ゲーム検索フォーム]![頭文字] Is Null)) OR ((メーカー = [FORMS]![ゲーム検索フォーム]![メーカー名2] OR [FORMS]![ゲーム検索フォーム]![メーカー名2] Is Null AND [FORMS]![ゲーム検索フォーム]![頭文字2] Is Not Null) AND (頭文字(かな) = [FORMS]![ゲーム検索フォーム]![頭文字2] OR [FORMS]![ゲーム検索フォーム]![メーカー名2] Is Not Null AND [FORMS]![ゲーム検索フォーム]![頭文字2] Is Null)) OR ((メーカー = [FORMS]![ゲーム検索フォーム]![メーカー名3] OR [FORMS]![ゲーム検索フォーム]![メーカー名3] Is Null AND [FORMS]![ゲーム検索フォーム]![頭文字3] Is Not Null) AND (頭文字(かな) = [FORMS]![ゲーム検索フォーム]![頭文字3] OR [FORMS]![ゲーム検索フォーム]![メーカー名3] Is Not Null AND [FORMS]![ゲーム検索フォーム]![頭文字3] Is Null)) OR ((メーカー = [FORMS]![ゲーム検索フォーム]![メーカー名4] OR [FORMS]![ゲーム検索フォーム]![メーカー名4] Is Null AND [FORMS]![ゲーム検索フォーム]![頭文字4] Is Not Null) AND (頭文字(かな) = [FORMS]![ゲーム検索フォーム]![頭文字4] OR [FORMS]![ゲーム検索フォーム]![メーカー名4] Is Not Null AND [FORMS]![ゲーム検索フォーム]![頭文字4] Is Null)) ORDER BY メーカー, ゲーム名; のような感じかな? 頭が混乱してるのと、動作検証はしてないから、確認はしてね^^; 多分、条件を複雑にしすぎてるのが、最初の癌だね;;
その他の回答 (3)
- CHRONOS_0
- ベストアンサー率54% (457/838)
抽出条件がうまく保存されないというのは デザインビューが作ったものと変わってしますということですか? Accessは初心者に優しいデータベースということが売りで SQLを勉強しないでもクエリが作れるようになっています それがクエリデザインビューというGUI(グラフィックインタフェース)です Accessはあそこに入力された情報からSQLを作成しクエリとして保存します 保存したものをクエリデザインビューで表示するときには 保存したSQLからデザインビューを再現しようとします このアルゴリズムがあまりよくないのかああいう書き方をすると 作ったときとは異なるものが再現されてしまいます アルゴリズム的には同じものなので動きに変わりはありませんが それをまた保存すると当初の簡潔なSQLがかなりごたごたしたものに変わってしまいますから パフォーマンス的には決して同じじゃないでしょうね、困ったものです これに対処するには、デザインビューを最初のSQL作成だけに使用し 後はデザインビューを使わないという態度で臨むしかありません あの形で作成した後SQLで表示してから保存すれば 次回開いたときにはSQLビューで表示されるようになります
補足
そうみたいですね~^^;以前仕事で使っていたのですが、しばらく使わなかったのですっかり忘れてしまって・・;;ほんと勉強になりました。
- CHRONOS_0
- ベストアンサー率54% (457/838)
抽出条件を =FORM!検索フォーム!テキストボックス or FORM!検索フォーム!テキストボックス is null に変えます
補足
お返事が遅くなって申し訳ありません。 この方法だと抽出条件がうまく保存?されないのですが、私のやり方が間違っているのでしょうか??
- Dxak
- ベストアンサー率34% (510/1465)
クエリのSQL文をUP可能でしょうか? SQLビューで、テキスト文字で羅列されているものです NZ関数あたりを抽出条件に、持ってくれば可能だと思うのですけどね 例えば、抽出条件に Like FORM!検索フォーム!テキストボックス と、なってれば・・・ Like Nz(FORM!検索フォーム!テキストボックス,"*") あたりに、変えてみるとか
補足
INSERT INTO ゲーム名ワーク1 ( メーカー, ゲーム名, ゲーム名(カナ), 頭文字(かな), 枚数, ジャンル ) SELECT ゲーム名テーブル.メーカー, ゲーム名テーブル.ゲーム名, ゲーム名テーブル.ゲーム名(カナ), ゲーム名テーブル.頭文字(かな), ゲーム名テーブル.枚数, ゲーム名テーブル.ジャンル FROM ゲーム名テーブル WHERE (((ゲーム名テーブル.メーカー)=[FORMS]![ゲーム検索フォーム]![メーカー名1]) AND ((ゲーム名テーブル.頭文字(かな))=[FORMS]![ゲーム検索フォーム]![頭文字])) OR (((ゲーム名テーブル.メーカー)=[FORMS]![ゲーム検索フォーム]![メーカー名2]) AND ((ゲーム名テーブル.頭文字(かな))=[FORMS]![ゲーム検索フォーム]![頭文字2])) OR (((ゲーム名テーブル.メーカー)=[FORMS]![ゲーム検索フォーム]![メーカー名3]) AND ((ゲーム名テーブル.頭文字(かな))=[FORMS]![ゲーム検索フォーム]![頭文字3])) OR (((ゲーム名テーブル.メーカー)=[FORMS]![ゲーム検索フォーム]![メーカー名4]) AND ((ゲーム名テーブル.頭文字(かな))=[FORMS]![ゲーム検索フォーム]![頭文字4])) ORDER BY ゲーム名テーブル.メーカー, ゲーム名テーブル.ゲーム名; これでいいのでしょうか? よろしくお願いします。
お礼
>頭が混乱してるのと、動作検証はしてないから、確認はしてね^^; いぇいぇ これでバッチリでした。 空白では検索結果が0件に、そしてどちらかが入力されればきちんと検索されるようになりました。 本当にありがとうございました!!
補足
返事が遅くなって申し訳ありません;; 追加クエリーなのは、レポート出力のためにワークテーブルに書き出している為なんです。。そこがややこしくしている所なのかな。。 こんなにも面倒な事になるのですね。。 この方法で試してみますね。 ありがとうございました。