![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
VBAからADOを使ってクエリのクエリを作成したい
ADO初心者です。
VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。
なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?
No.4ベストアンサー
- 回答日時:
SELECT文の中にSELECT文ですが、わかりますか?。
重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば
クエリのクエリと同じ結果を得られると思いますし、
重複しているものは何だったかという後から調べることがあったときには重宝します。
処理ができさえすればシンプルでもいいなら、
機能分けてもいいでしょう。
layyさんに教えて頂いた方法で無事、解決しました。
layyさんやnda23さんにアドバイス頂くまで、そもそもSQLの意味を理解しようとすら考えておらず、SQLはただ単にAccessのデザインビューで作ったクエリをSQLビューでコピペするだけのものとしてしか認識していませんでした。よくよく構文を見てみると非常にシンプルですし、もっとしっかりSQLを勉強する事にします。本当にどうもありがとうございました。
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句を使います。
ご回答頂きありがとうございます。
ファイル名Aと層番号は1:1の関係とはなっておらず、教えて頂いた方法では上手くいきませんでした。
※正式品名ごと、.試作番号ごと、ロット番号ごとに層番号は1から始まる連番の数字と定義されています
いろいろ試してみた結果、INTOステートメントを使ってクエリ(1)の結果をダミーの新規テーブルに出力した上で、その新規テーブルに対するクエリ(2)を作成する事で、意図した動作をさせる事が出来ました。どうもありがとうございました。
No.2
- 回答日時:
mdb内のクエリを動的に変更することは
好ましくありません。止むを得ない場合も
ありますが、大抵はサブクエリを使えば、
解決するはずです。
SELECT * FROM A WHERE ~ << クエリ(1)
SELECT * FROM クエリ1 << クエリ(2)
↓
SELECT * FROM (SELECT * FROM A WHERE ~)
このようにすれば、クエリなしでRecordsetが
生成できます。できればクエリ(1)とクエリ(2)の
SQLを開示してください。
この回答への補足
返事が遅くなってしまい申し訳ございませんでした。ご回答頂きありがとうございます。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内のクエリを動的に変更する必要は特にありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【access】複数のフィールドの...
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
VBAでテーブル名とカラム名を動...
-
ACCESSで実行時エラー3008
-
ACCESSのクエリ、SQLに変数を使...
-
「ご処理進めて頂きますようお...
-
VBAでループ内で使う変数名を可...
-
Excelシート上のマクロを登録し...
-
エクセルで、日付を入力すると...
-
UPS警告音を止めたい
-
メルカリのメルカードで買い物...
-
CloseとDisposeの違い
-
VBAにてメッセージボックスを最...
-
アクセスVBAのMe!と[ ]
-
Accessでフォームから別フォー...
-
ユーザーフォームをショートカ...
-
EXCEL VBA マクロ 実行する度に...
-
Excel VBA マクロ実行中のみテンキ...
-
UWSC画像認識で座標の位置がず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
ACCESS VBAでテーブル内の特定...
-
【access】複数のフィールドの...
-
Access vbaで重複レコードの削...
-
重複した複数のレコードを1レ...
-
SQLServer→Access インポート
-
ACCESSのクエリ、SQLに変数を使...
-
別のaccessファイルからデータ...
-
Accessで縦と横を入れ替えたい
-
ACCESSで実行時エラー3008
-
アクセスで定数を利用したい。
-
抽出条件でデータ型が一致しま...
-
テーブル作成クエリを実行した...
-
社員名簿から検索する関数
-
ACCESSで購入回数を表示する方...
-
Access から Excelのシートをイ...
-
DataGridViewで複数条件の抽出...
-
アクセスで連続データをテーブ...
-
VBAからADOを使ってクエリのク...
おすすめ情報