• ベストアンサー

アクセスで複数のクエリを使ったデータ抽出

一つのテーブルがあり、そこから削除したいレコードを複数の条件でそれぞれクエリを作成します。3つクエリができたとして、 元データ-(クエリ1)-(クエリ2)-(クエリ3)=抽出データ としたいのですが、これを一度のアクションで行うことはできるでしょうか?

noname#41715
noname#41715

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

  • ベストアンサー
  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.6

何度も失礼します。余計なお世話かもしれませんが。 クエリを選択制にしたいということですが、クエリからクエリを作成している以上、選択制には出来ないのではないですか? 例えばテーブル1からIDが10以上のデータを抽出してクエリ1を作成してそれを基にふり仮名が「ア」で始まるデータを抽出してクエリ2を作成し、それを基に住所が東京都のデータを抽出したクエリ3を作成したとします。でもある時、東京都在住の人全員のデータが欲しくなったとします。その場合、クエリ3の条件だけ選択したいと言っても、クエリ2を基に作っているので、クエリ3を利用することは出来ず、もう一つテーブル1を基にクエリ3と同じ抽出条件のクエリ4というクエリを作成する必要があります。なので、20個のクエリの組み合わせによって変化させるのなら、ものすごい数のクエリが必要になります。UNIONクエリもクエリからクエリを作成されている以上、うまくいかないと思いますよ。 20個のクエリにそれぞれ10個の条件があった場合、200の条件で抽出することになります。どういう状況かわかりませんが、本当にそれだけの条件を作ったクエリが必要ですか?パラメーターなどで、抽出条件を入力できるように作ったほうが良くはないですか?

noname#41715
質問者

補足

ご意見ありがとうございます。 クエリは、抽出条件用のデータを作成する為にひとつ、それを元に抽出したデータがひとつ。のシンプルなものです。2重3重となっているわけではありません。この抽出条件用のクエリにかなりややこしい条件をつけていますので、条件欄の文字数オーバーとかになるほどです。単純にテキストを検索して抽出というのではなく、計算式等を入れた新しいフィールドに対してさらに複雑な条件をかける・・・というような感じです。 私がイメージしていたのはフォームにてチェックボックスをクエリ分作り、チェックが入ったクエリのみデータを抽出し、元テーブルから除外し、残りのデータを表示する。これをボタンひとつで。が希望でした。 ユニオンクエリは画期的だなぁと思ったのですが、一度データを作って終わり、ではなく毎回元データは変化しますのでやはりクエリを選択制にするってところで難しいかなぁと・・・。 中途半端な知識で余計ややこしくさせてしまいすみません。。。

その他の回答 (5)

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.5

削除は関係ないですよね。元データから選択クエリで抽出したいだけで元データを消したいわけではないですよね。削除クエリを実行("DELETE FROM~" )すると元データのテーブルからデータが消えてしまいますよ。誤解を招くので削除という言葉は使わないほうが良いでしょう。 >私が出来なかっただけかもしれませんが 多分そうだと思われます。そちらの方を質問されてクエリを書き直されたほうが良いと思います。クエリを複数かませると処理速度が低下したりします。これからも色々お作りになると思いますので、そういうものをどんどん増やし、つじつまを合わせるやり方を考えるより、正しい作り方を覚えられてスマートな形の物に作り直された方が宜しいかと思います。 クエリを書き直せば、特にVBAを使用する必要もないように思われます。コマンドボタン押下でクエリを開くようにマクロを組めば良いだけです。

noname#41715
質問者

お礼

ご意見ありがとうございます。 クエリを分けている理由は、そのクエリを選択制にしたいということもあり、わかりやすいように個別にしていました。 実際にはクエリは20個あるんです。これを一つにまとめるのは至難の業ではないかと…演算フィールドも沢山あるので、何十列となり、ちょっとこんがらがってしまいそうです。。。 ありがとうございました。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

抽出のみなら、UNION で結合出来ると思いますよ。 <参考> http://makotowatana.ld.infoseek.co.jp/access/achowCombineDataInFieldsTwoMoreTablesUnionQueryS.htm

noname#41715
質問者

お礼

こんなやり方があったんですねっ。さっそくやってみます!ありがとうございます。

noname#140971
noname#140971
回答No.3

訂正: DoCmd.OpenTable "仕入記録" クエリを作らなくても良かったです。

noname#140971
noname#140971
回答No.2

VBA が全く判らなくても、コピペ位はできるでしょう。 VBA が全く判らなくても、フォームにコマンドボタンは配置できるでしょう。 <仕入記録> ID____商品マスター_ID_仕入数量_仕入単価 1_____商品A______________10___________\1,000 2_____商品A______________20___________\1,000 3_____商品B______________15___________\1,500 このようなテーブルがあったとします。 クエリ1=SELECT 仕入記録.*, * FROM 仕入記録; というクエリを用意します。 もちろん、このクエリは<仕入記録>を全て表示します。 <クエリ1> ID____商品マスター_ID_仕入数量_仕入単価 1_____商品A______________10___________\1,000 さて、クエリ1をフォームのコマンドボタンで表示するとこのようになりました。 仕入数量=20 仕入単価=1500 を削除した結果を表示しているからです。 Private Sub コマンド0_Click() On Error Resume Next   CnnExecute ("DELETE FROM 仕入記録 WHERE 仕入単価=1500;")   CnnExecute ("DELETE FROM 仕入記録 WHERE 仕入数量=20;")   DoCmd.OpenQuery "クエリ1" End Sub ところで、フォームのコマンドボタンの書いたVBAのコードはこのように実に簡単なものです。 DELETE文は、質問者が作成されたクエリをコピーされても動作します。 クエリをSQLビューで表示すれば、クエリはSQL文の形で表示されます。 どうでしょう、この位のコードですと書けるのじゃないでしょうか? なお、CnnExecute は、後で補足します。

noname#41715
質問者

補足

ご回答ありがとうございます。CnnExecuteの意味はさっぱりなのですが、この処理をクエリ1、クエリ2というように連続させる場合はどのようになるのでしょうか? それと、ずーずーしいのですが、たとえば「テキストBOX1」に"1"を入力したらクエリの1を実行…とする場合のIF文もできれば教えていただきたいのですが…。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.1

ごめんなさい。やりたいことが解りかねます。 元データを削除したいのですか?それとも、3つの条件でデータを抽出したいだけでしょうか?どちらにしても、3つのクエリの意味がわかりません。1つのクエリに3つの条件を指定すれば良いのでは?

noname#41715
質問者

補足

説明不足ですみません。ひとつのクエリで3つの条件を指定すれば…そうなのですが、条件用のクエリをそれぞれ間に挟んでおり、一度に指定するのは出来ませんでした。(私が出来なかっただけかもしれませんが) 削除用のデータをクエリで3つ用意して、それを除いたデータを元テーブルから抽出したいのです。 そして、そのクエリ3つのうち、削除したいクエリを選択できるようにしたいと思っています。 例えば、クエリの1と3にを指定した場合はクエリの2を無視してデータを抽出する…というような仕組みです。 VBAのことはさっぱりですが、これをボタン一つで処理出来れば、と思いました。 このような説明で分かってもらえたでしょうか?無茶苦茶なこと言っていたら申し訳ありません。

関連するQ&A

  • access2007 クエリで抽出

    初心者です。クエリで抽出したのですが、一部のデータが抜け落ちます。抽出条件のフィールドはテキスト型で、元のテーブルでコピペで統一しましたが、同じデータが抜け落ちます。削除してやり直しても同様でした。重複クエリを作成するとこのフィールドが重複して出てきます。どこを直したらいいのか見当がつきません。よろしくお願いします。

  • クエリにおける複数値の抽出について

    クエリにおける複数値の抽出について access2007を使用しています。 テーブルA,テーブルBを元にクエリCを作成しました。 テーブルAには担当というフィールドがありますが,複数の値の入力を許可しており,テーブルBを値集合ソースとして設定してあります。 クエリCにおいて,以下のような抽出をしたいと考えています。 例えば, ID_所員ID_担当 001_B001,B002,B003_山田,佐藤,鈴木 002_B002_佐藤 003_B001,B002_山田,佐藤 において,所員IDの抽出条件のところにB002と入力すると,ID002のみが抽出されるといった感じです。 B002と抽出条件を設定すると,B002を含む全てのレコードが抽出されてしまいます。この場合ですと,ID001から003の全てのレコードが抽出されます。 担当のところで抽出条件を佐藤と設定し,さらに所員IDの抽出条件のところに,Len関数を使用して4文字以下とすれば…とも考えたのですが上手くいきません。 もし,良い方法があればご教示ください。

  • ACCESS クエリの抽出条件

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

  • ACCESSクエリーの抽出条件について

    OS WIN7 ACCESS 2007使用です。 クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。 コード 1 2 3 4 5 ・ ・ このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。 抽出条件はどのように書けばよいのでしょうか? いろいろ試したのですが、うまくいきません。 どなたかお助け下さい。

  • Access2000の削除クエリで消してしまったデータの復旧

    Access2000を使用していますが、うっかり抽出条件を入れるのを忘れて削除クエリを実行してしまい、テーブルの中のレコードをすべて消してしまいました。バックアップを取っていなかったので、データが無います。 何か削除したレコードを復旧させる方法はありますでしょうか。難しいとは思いますが、どうぞ宜しくお願いいたします。

  • Accessクエリの抽出条件

    Access2000を使用しています。 クエリの抽出条件にテーブルの値を使用したいのですが、その方法がわかりません。 テーブルAには、「日付」、「当者コード」 などの項目があります。 テーブルBの項目は「担当者コード」のみです。また、1レコードしか登録 されていません(2レコード以上になることはありません)。 そこで、テーブルAに対するデータ抽出条件を、テーブルBの「担当者」としたいのですが、 どのように記述すればよろしいでしょうか・・・? よろしくお願いします。

  • Access クエリ 抽出条件

    Access の クエリ における 抽出条件 の 書き方についてご質問させていただきます。 クエリには、左から『商品名』、『出荷数量』、『注文数量』の3列がございます。 各レコードの『出荷数量』フィールドの値と『注文数量』フィールドの値を比較し、 『注文数量』フィールドの値の方が大きいレコードだけを抽出したいのですが、どのように抽出条件を記載すればよろしいでしょうか? 元データは1つのテーブルに格納されています。 例:注文数量:500、出荷数量:200など出荷数量が少ないレコードを抽出対象 注文数量:100、出荷数量:100など注文数量=出荷数量レコードは抽出対象外

  • Access 複数の抽出条件

    Access2002 windows2000 (例)次のようなテーブルとします。 フィールド名:名前 年齢 性別 レコード1 :山本 30 男 レコード2 :鈴木 40 女 レコード3 :田中 45 男 レコード4 :森本 26 女 クエリを利用して抽出する時、年齢が40以上で男を条件とすれば (1)年齢フィールドの抽出条件:>=40 (2)性別フィールドの抽出条件:男 として、田中が抽出されます。 では年齢が40以上で男、そして女は全て抽出したい時は(1)(2)の条件はどの様にすればいいでしょう? 抽出結果が 田中、鈴木、森本となりたいのです。 複数のクエリを作れば出来ますが、1つのクエリでは無理なのでしょうか。

  • クエリーで全部のデータを抽出する方法

    アクセスのクエリーでデータを抽出する時、具体的にはフォームでデータを入力し抽出するのですが、たとえばフォームのテキストボックスに数字を入れないとそのクエリーのフィールドは抽出がかからないようにしたいのです。(抽出フィールドが1つなら数字をいれなければクエリーのデータすべてが表示される) ----------------------------------- フィールド   A      B     c テーブル   テーブル1 テーブル1 テーブル1 抽出条件    []    [] または    ---------------------------------- 上はクエリーのデザインですがクエリーをひらくと抽出条件をきいてきますがA列は何も入力しないでB列では1と入力するとBの列に1の入ってるレコードを表示させたいのです。(もし空欄が無理ならAの列の時何かある文字を入力すると全部表示になる、でもいいです。) まわりくどくなりましたが、アクセス超入門者です。よろしくおねがいします。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

専門家に質問してみよう