アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAからADOを使ってクエリのクエリを作成したい

ADO初心者です。

VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。

なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?

A 回答 (4件)

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

    • good
    • 0

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内のクエリを動的に変更する必要は特にありません。

補足日時:2010/09/02 19:26
    • good
    • 0

出来上がりの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句を使います。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございます。

ファイル名Aと層番号は1:1の関係とはなっておらず、教えて頂いた方法では上手くいきませんでした。
 ※正式品名ごと、.試作番号ごと、ロット番号ごとに層番号は1から始まる連番の数字と定義されています

いろいろ試してみた結果、INTOステートメントを使ってクエリ(1)の結果をダミーの新規テーブルに出力した上で、その新規テーブルに対するクエリ(2)を作成する事で、意図した動作をさせる事が出来ました。どうもありがとうございました。

お礼日時:2010/09/03 20:12

SELECT文の中にSELECT文ですが、わかりますか?。



重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば
クエリのクエリと同じ結果を得られると思いますし、
重複しているものは何だったかという後から調べることがあったときには重宝します。

処理ができさえすればシンプルでもいいなら、
機能分けてもいいでしょう。
    • good
    • 0
この回答へのお礼

layyさんに教えて頂いた方法で無事、解決しました。

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

お礼日時:2010/09/03 20:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!