- ベストアンサー
アクセスのクエリーで抽出方法
以前(9/25)にもこのgooで質問しいろいろ指導を受けたのですがなかなか解決せず、時がたちなかなか回答が得られず、また同じ質問をします。 クエリーで抽出する方法なのですが、例えば a b 山 50 川 30 のようなクエリーの表があります。フォームでテキストボックスに”山”と入力したら 山 50 と表示することはできますが”すべて”と入力したら 山 50 川 30 と表示したいのです。クエリーにはすべてという文言はありません。 クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1],フォーム名![Text1],Is Not Null)と入力するもののうまくいきません。 アクセス超初心者です。なおアクセス97を使用しています。よろしくご指導ください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
やっと理解できました。ただ、最後に1点わからないんです。最後に「"A1" と入力した際に 式="A1" となったりしますが上書き保存すれば "A1" となります。」 となっていますがフィールドにA1と入力しても式1: [A1]となってしまい[ ]に囲まれるのです。数字だけ、たとえば10と入力すれば”式1: 10”となりうまくいくのですがA1とか数字以外の文言を入れると[]に囲まれて実行してもパラメータの入力と聞いてきてうまくいきません。基本的なことなのかも知れませんが[]を消す方法があれば教えてください。 *********************************************** *********************************************** こんにちわ 補足です 「表示」のところの 四角マークを空白にして保存すれば 式 は消えて "A1" となります (A1だけでなくダブルコ-テ-ションも当然必要です) 四角マークはクエリー作成での4段目のところにあります つぎの段階では使わない項目であれば ここは空白(マーク無し)とするための機能です
その他の回答 (5)
- oka123
- ベストアンサー率31% (69/219)
追加説明です >「すべて」でなくA*にするということは >テキストボックスにすべて*と入力すること >なのですか。 そうです 私の場合はテキストボックス初期値として「規定値」で A* を入れています ダブルクリックで A* にもどるように イベントプロシジアで指定しています >あと、新規の項目を(右側へ) >つくるというのは、クエリーの場所に新たに >フィールドを追加するということでしょうか。 >(項目名の欄へは A1とするのはフィールド名がA1?) -------------------------------------------- フイールド の行 | FILED-NAME | "A1" | -------------------------------------------- (四角は空白に) フイールドの行のところには普通はテーブルの なかのフイールド名をもってきます それとはべつの列に "A1" というように書きます これはフイールド自体を表現するのでなくて A1 という値があるということを意味します したがってその下の行で選択条件を LIKE で書けば "A1" と A* が 一致することになります OR条件とするために、この LIKE文 は 一段下の選択条件行へ書きこみます 同一ラインに書くとAND条件になってしまいます ----------------------------------- テキストボックスで「すべて」という言葉を 使いたいならば おなじ理屈でそれでも可能です "A1" のかわりに "すべて" とすればよいです ただし 同じ言葉「すべて」だとフイールド欄へは ひとつだけしかつくれないと思います * によるLIKE機能も期待できなくなります 複数項目で選択するならさらに右へもうひとつ、例えば "A2" という値を入れればいいです ----------------------------------- "A1" と入力した際に 式="A1" となったり しますが 上書き保存すれば "A1" となります
補足
やっと理解できました。ただ、最後に1点わからないんです。最後に「"A1" と入力した際に 式="A1" となったりしますが上書き保存すれば "A1" となります。」 となっていますがフィールドにA1と入力しても式1: [A1]となってしまい[ ]に囲まれるのです。数字だけ、たとえば10と入力すれば”式1: 10”となりうまくいくのですがA1とか数字以外の文言を入れると[]に囲まれて実行してもパラメータの入力と聞いてきてうまくいきません。基本的なことなのかも知れませんが[]を消す方法があれば教えてください。
- gooco_chan
- ベストアンサー率25% (36/144)
#2 です。 非表示のフィールド名には、 IIf([Forms]![フォーム1]![テキスト0]<>"すべて",[a]=[Forms]![フォーム1]![テキスト0],[a] Is Not Null) 抽出条件には、<>false (=True) となっているかと思います。 フィールド名が可変になっていて、 ”すべて”が入力されていないときは、 テキストボックス入力と一致するもの(True状態:-1のレコード)が選択されます。 ”すべて”が入力されているときは、 aがNot Nullのもの(True状態:-1のレコード)が選択されます。 [a]=[Forms]![フォーム1]![テキスト0]も[a] Is Not Nullも返り値はTrue(-1)かFalse(0)になるということです。 うまく説明できなくてごめんなさい。 これを機にSQLを勉強してくだされば、幸いです。 クエリーって、=などを自動的に判断している部分があって、 痒いところに手が届かないんですよね。
- oka123
- ベストアンサー率31% (69/219)
こんにちわ すべてのときには 「すべて」 ではなくて A* などとします(*をつけるのが、みそです) そして以下のようにして選択クエリーをつくります まず 山としたときにその値を一致させる役割として クエリーの当該項目の選択条件欄へ Forms![form-name]![field-name] とします つぎに新規の項目を(右側へ)つくります 項目としてはテーブルからの項目名ではなく 項目名の欄へは "A1" とします(値そのものを定義したことになります) この項目の抽出条件欄へ (or条件になるように行は、ずらします) Like Forms![form-name]![field-name] () が必要かもしれませんが? とします この式で * がlike命令で有益となり A* と A1 とが検索一致することになり 全件抽出ができます 本格的にはクエリーではなく「モジュール」で 行うほうが複雑な条件も表現できるのですが クエリーだけで行う場合は、上の方式が有効です それから、「項目は作らない」のところは 白紙(四角印のマーク無し)で指定します
補足
すみません。補足願います。「すべて」でなくA*にするということはテキストボックスにすべて*と入力することなのですか。あと、新規の項目を(右側へ)つくるというのは、クエリーの場所に新たにフィールドを追加するということでしょうか。(項目名の欄へは A1とするのはフィールド名がA1?) 見当違いでしたらゴメンナサイ
- gooco_chan
- ベストアンサー率25% (36/144)
うまく説明ができませんが、ここはひとつSQLを勉強してみてはいかがでしょうか? 選択クエリーをSQLビューで開いてみて下さい。 クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null)と入力する。 この場合のSQL文は、 SELECT a, b FROM テーブル名 WHERE (((a)=IIf([フォーム名]![Text1]<>"すべて",[フォーム名]![Text1],(a) Is Not Null))); となり、”すべて”を入力した場合の条件がa=(a)Is Not Null では正しくデータを取得できません。 SELECT a, b FROM テーブル名 WHERE (((IIf([Forms]![フォーム名]![Text1]<>"すべて",[a]=[Forms]![フォーム名]![Text1],[a] Is Not Null)))); と書けば、すべてが入力された場合、[a] Is Not Nullという条件で絞り込まれます。 テーブル名、フォーム名には任意のものをセットしてください。 難しいようでしたら、補足入れてください。
お礼
うまくいきました。ありがとうございました。 ただどうしてこうなるかはチンプンカンプンです。SQLはアクセスの参考書を見ながら(入門書)で簡単なユニオンクエリーを作ったことがあるだけです。新たなフィールドは非表示になっていましたが表示してみるとすべて-1が入っていましたね。このフィールドの意味だけでも簡単に教えてもらえませんか。図々しく何回もきいてすみません。
- MovingWalk
- ベストアンサー率43% (2233/5098)
>クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1],フォーム名![Text1],Is Not Null) >と入力するもののうまくいきません。 どうしているいるのか、いまいちわかりませんが、 Like "*" ではどうですか?
お礼
ありがとうございました。うまくいきました。当然必要な””をつけなかったからうまくいきませんでした。アクセス超初心者ということでいろいろ初歩的な質問を何回もつきあっていただきありがとうございました。