VBAからADOを使ってクエリのクエリを作成したい
ADO初心者です。
VBA側で入力された引数を元に、ADOを使ってあるmdbファイルにあるクエリ(1)の抽出条件を変更した上で(抽出条件はVBA側の引数によって毎回変わります)、クエリ(1)の中から重複したレコードを抽出するクエリ(2)を作成したいと考えています。クエリ(1)並びにクエリ(2)をそれぞれ単独で作成する事は出来たのですが、クエリ(1)の結果を反映したクエリ(2)を作成する方法が分かりません。
なお、クエリ(1)の抽出条件変更は、RecordsetオブジェクトのOpenメソッドを使って行っています。何となくこれはレコードの更新は出来てもクエリの更新は出来ないような気がしており、それが原因のような気がしているのですが、クエリの更新をしたい場合はどうすればよろしいでしょうか?
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内のクエリを動的に変更する必要は特にありません。
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.4ベストアンサー
- 回答日時:
SELECT文の中にSELECT文ですが、わかりますか?。
重複しているものを検索した結果を一旦テーブルに(作成し)保持すれば
クエリのクエリと同じ結果を得られると思いますし、
重複しているものは何だったかという後から調べることがあったときには重宝します。
処理ができさえすればシンプルでもいいなら、
機能分けてもいいでしょう。
layyさんに教えて頂いた方法で無事、解決しました。
layyさんやnda23さんにアドバイス頂くまで、そもそもSQLの意味を理解しようとすら考えておらず、SQLはただ単にAccessのデザインビューで作ったクエリをSQLビューでコピペするだけのものとしてしか認識していませんでした。よくよく構文を見てみると非常にシンプルですし、もっとしっかりSQLを勉強する事にします。本当にどうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) お世話になります ACCESSを使用しています 下記のクエリデータ(1)があります 商品名 行数 A 1 2022/09/05 08:52
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Access(アクセス) Accessのスプレッドシートエクスポートで、シートが追加されてしまう 2 2022/07/16 21:45
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Access(アクセス) Access DAOのExecuteメソッドのオプション(RecordsetOptionEnum)に 1 2022/09/19 07:34
- Excel(エクセル) VBAで「クエリと接続」の画面を出せますか? 2 2022/10/24 13:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データがあれば○○なければのSQL
-
重複した複数のレコードを1レ...
-
ACCESSのクエリ、SQLに変数を使...
-
Access vbaで重複レコードの削...
-
ACCESS DCOUNTの抽出条件について
-
access追加クエリーでform入力...
-
オートナンバー型の数字を振り...
-
ACCESS VBAでテーブル内の特定...
-
ACCESSで実行時エラー3008
-
【access】複数のフィールドの...
-
抽出条件でデータ型が一致しま...
-
もしかして
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
VBAでループ内で使う変数名を可...
-
エクセルVBAで、MsgBox やInput...
-
Do~Loopした回数をカウントしたい
-
switch の範囲指定
-
VBAでセルに値が入力されるまで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
【access】複数のフィールドの...
-
ACCESS VBAでテーブル内の特定...
-
Access vbaで重複レコードの削...
-
ACCESS DCOUNTの抽出条件について
-
Accessで縦と横を入れ替えたい
-
VBAでテーブル名とカラム名を動...
-
DataGridViewで複数条件の抽出...
-
Access から Excelのシートをイ...
-
重複した複数のレコードを1レ...
-
DAOでSQLServerに接続し、LeftJ...
-
SQLServer→Access インポート
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
別のaccessファイルからデータ...
-
access追加クエリーでform入力...
-
抽出条件でデータ型が一致しま...
-
【PHP/MySQL】コード上で生成...
-
Accessリンクするテーブルが見...
-
ACCESSで購入回数を表示する方...
おすすめ情報