• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAからADOを使ってクエリのクエリを作成したい)

VBAからADOを使用してクエリのクエリを作成する方法

このQ&Aのポイント
  • VBAを使用してADOを介してクエリのクエリを作成する方法について学びます。クエリの抽出条件を変更し、重複したレコードを抽出するクエリを作成する方法も解説します。
  • クエリの抽出条件の変更はRecordsetオブジェクトのOpenメソッドを使用して行いますが、クエリの更新方法に関しては課題があります。解決策についても考えていきます。
  • クエリの抽出条件変更や重複レコードの抽出については、VBAとADOの組み合わせを使用することで実現できますが、クエリの更新方法に関してはさらなる調査が必要です。

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

SELECT文の中にSELECT文ですが、わかりますか?。 重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば クエリのクエリと同じ結果を得られると思いますし、 重複しているものは何だったかという後から調べることがあったときには重宝します。 処理ができさえすればシンプルでもいいなら、 機能分けてもいいでしょう。

VAN613
質問者

お礼

layyさんに教えて頂いた方法で無事、解決しました。 layyさんやnda23さんにアドバイス頂くまで、そもそもSQLの意味を理解しようとすら考えておらず、SQLはただ単にAccessのデザインビューで作ったクエリをSQLビューでコピペするだけのものとしてしか認識していませんでした。よくよく構文を見てみると非常にシンプルですし、もっとしっかりSQLを勉強する事にします。本当にどうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

出来上がりのSQLは以下の通りです。 SELECT A.ファイル名A, B.層番号 FROM (SELECT ファイル名A FROM テーブルA WHERE 正式品名='~' AND 試作番号=~ AND ロット番号=~ GROUP BY ファイル名A HAVING COUNT(ファイル名A)>1) AS A INNER JOIN テーブルA AS B ON A.ファイル名A=B.ファイル名A 但し、ファイル名Aと層番号は1:1の関係が無いと 正しい結果になりません。 また、WHERE 項目 In (SELECT ~)のような 書式は古い書き方で、現在はJOIN句を使います。

VAN613
質問者

お礼

ご回答頂きありがとうございます。 ファイル名Aと層番号は1:1の関係とはなっておらず、教えて頂いた方法では上手くいきませんでした。  ※正式品名ごと、.試作番号ごと、ロット番号ごとに層番号は1から始まる連番の数字と定義されています いろいろ試してみた結果、INTOステートメントを使ってクエリ(1)の結果をダミーの新規テーブルに出力した上で、その新規テーブルに対するクエリ(2)を作成する事で、意図した動作をさせる事が出来ました。どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

mdb内のクエリを動的に変更することは 好ましくありません。止むを得ない場合も ありますが、大抵はサブクエリを使えば、 解決するはずです。 SELECT * FROM A WHERE ~ << クエリ(1) SELECT * FROM クエリ1 << クエリ(2)         ↓ SELECT * FROM (SELECT * FROM A WHERE ~) このようにすれば、クエリなしでRecordsetが 生成できます。できればクエリ(1)とクエリ(2)の SQLを開示してください。

VAN613
質問者

補足

返事が遅くなってしまい申し訳ございませんでした。ご回答頂きありがとうございます。SQLを以下に示します。 クエリ(1) SELECT テーブルA.シリーズ名, テーブルA.正式品名, テーブルA.試作番号, テーブルA.ロット番号, テーブルA.層番号, テーブルA.ファイル名A, テーブルA.ファイル名B FROM テーブルA GROUP BY テーブルA.シリーズ名, テーブルA.正式品名, テーブルA.試作番号, テーブルA.ロット番号, テーブルA.層番号, テーブルA.ファイル名A, テーブルA.ファイル名B; クエリ(2) SELECT クエリ(1).ファイル名A, クエリ(1).層番号 FROM クエリ(1) WHERE (((クエリ(1).ファイル名A) In (SELECT [ファイル名A] FROM [クエリ(1)] As Tmp GROUP BY [ファイル名A] HAVING Count(*)>1 ))) ORDER BY クエリ(1).ファイル名A; なお、やりたい事は以下の通りです。 A.利用者側のニーズに合わせVBA側で「正式品名」「試作番号」「ロット番号」に関する任意の抽出条件を設定 B.その抽出条件の範囲内でファイル名Aが重複しているものを検索 C.ファイル名Aが重複しているもののファイル名A並びに層番号一覧をExcel出力 従って、mdb内のクエリを動的に変更する必要は特にありません。

すると、全ての回答が全文表示されます。
  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

クエリのクエリ、このSQLをOpenメソッドで指定してみましたか?。

すると、全ての回答が全文表示されます。

関連するQ&A