プロが教える店舗&オフィスのセキュリティ対策術

Windows7のAccess2007を使っています。
Accessのクロス集計クエリから、追加クエリをvbaで記述したいが記述
が分からない。

vbaを使わなければ、データベースウインドウで最初にクロス集計のク
エリを作って、そのクエリを使って追加クエリを作れば終わりですが。
これと同じ事をvbaで記述をしたいのですが。

出来るのでしょうか。

例として、収穫テーブルとサイズテーブルのクロス集計を作ると仮定し
て下記の構造で作る物とします。
収穫テーブルは下記の構造です。
1. idと言う名前でオートナンバーの型
2. サイズと言う名前で数値の型

サイズテーブルは下記の構造とします。
1. idと言う名前でオートナンバーの型
2. 名前と言うフィールドの名前でテキストの型

収穫のテーブルは下記のデータが入っています。
ID サイズ
1 1
2 2
3 2
4 2
5 1
6 2
7 3

サイズのテーブルは下記のデータが入っています。
ID 名前
1 大
2 中
3 小

リレーションシップは、一側のテーブルがサイズのテーブルで、idを主
キーとします。多側のテーブルは、収穫のテーブルで多側のキーはサイ
ズです。

ここで、クエリ1の名前で
TRANSFORM Count(収穫.ID) AS IDのカウント
SELECT 収穫.ID
FROM サイズ INNER JOIN 収穫 ON サイズ.ID = 収穫.サイズ
GROUP BY 収穫.ID
PIVOT サイズ.名前;

を実行すると、下記が得られます。
ID 小 大 中
1 1
2 1
3 1
4 1
5 1
6 1
7 1

ここで、クエリ1を使って下記のクエリ2を作ります。
INSERT INTO table1
SELECT クエリ1.*
FROM クエリ1;

上記の操作でクエリ1のクロス集計クエリを使って
クエリ2の追加クエリと言う二つの手段で
クロス集計からデータを作る事が出来ます。

この操作をvbaの手法で作る方法は無いのでしょうか。
この例でのコードの記述を宜しくお願いします。

質問者からの補足コメント

  • どう思う?

    Access2007では、クロス集計クエリをサブクエリとして使う事は時とし
    て出来る時と出来ない時がある。理由は、はっきりとはしないが。

    例えば、これに関してはQBEのビューでSQLビューで作り、これは最初は
    動く。然し、これをビューを切り替えると今迄に動いていた物が動かな
    くなる。この時に「from苦の構文エラー」が出る。

    然し、それはビューを切り替える前迄はきちんと動いていた。ここがど
    うしてなのかが分かりません。結果として今迄何の問題も無く動いてい
    た物がこの操作をした以降は全くとして動かなくなる。

    だから、これは若しかしたらAccess2007でも禁断の領域で使っているの
    かも知れない。これが、例えば他のデータベースで有れば若しかしたら
    動くのかも知れませんが。

      補足日時:2015/12/21 07:40

A 回答 (4件)

こちらが参考になるでしょう。


http://www.accessclub.jp/bbs6/0008/das1904.html


おまけ、上記を参考にした
一応動作するコード。

Dim strSQL As String
strSQL = "INSERT INTO table1 " & _
   "SELECT Q.* " & _
   "FROM [" & _
   "TRANSFORM Count(収穫.ID) AS IDのカウント " & _
   "SELECT 収穫.ID " & _
   "FROM サイズ INNER JOIN 収穫 ON サイズ.ID=収穫.サイズ " & _
   "GROUP BY 収穫.ID " & _
   "PIVOT サイズ.名前 " & _
   "IN ('大','中','小')" & _
   "]. As Q"
Debug.Print strSQL
CurrentDb.Execute strSQL
    • good
    • 0
この回答へのお礼

有難う御座います。
追加クエリと言うのは、相手のテーブルが事前に定義をされていないと動きません。
この場合のテーブルの定義はデータに依って変動しますので出来れば
テーブル作成クエリの方が、変にテーブル定義を考えないで済むので
宜しいのですが。

どうでしょうか。出来ないのでしょうか。
無理を言って済みませんがよろしくお願いします。

お礼日時:2015/12/18 08:23

話は変わるけど、


自分も20年位前アクセスを使い始めて、どうにも使いづらくて、
SQLServerに乗り換えました 、どうしてもSQLに固執するなら、DBサーバ導入、プロシージャ作成して、アクセスからパススルーでも投げたらどうですか
    • good
    • 0
この回答へのお礼

有難う御座います。
SQLServerは使った事が無いのですが、SQLServerならば出来るのでしょうか。

実はこれと似た様な事と言うのは、以前のAccess2003の時には出来ていた様な
記事がネットでも見かけた物ですから。若しかしたからAccess2007でも出来る
のかなあと思っていました。

バージョンの変化が激しくて以前に動いていた物が動かなくなると言う事は
良くある事ですので。

データベースと言うのは、他にも例えばMySQLとかは有りますが。これと言うのは
どうなんでしょうか。この様な事は出来るのでしょうか。詰まりは、クロス集計
クエリをサブクエリとして使うと言う事がです。

実はこの出来ないと言うのは、Accessだけの問題なのでしょうか。他のデータベースで
は出来ると言う事なのでしょうか。

クロス集計クエリをサブクエリとして使い、それでテーブル作成クエリを組み立てる
と言う事がです。私がやりたいのは、クロス集計クエリをサブクエリとして使い
テーブル作成クエリを作りたいのですが。

宜しく、お願いします。

お礼日時:2015/12/17 13:22

それであれば


http://www.accessclub.jp/bbs6/0031/das10414.html
この辺りを参考に
    • good
    • 0
この回答へのお礼

有難う御座います。
それは理解をしています。

それって言うのは結局は出来ないと言う事を言っているだけです。
何も変わりは有りません。
その方法で出来るのは分かっています。

ここで言っているのは、それ以外の方法の事です。
単純にここでの解決方法と言うのは、それがsqlで出来るのかどうかと言う事です。

sqlの構文を提示願います。

お礼日時:2015/12/17 09:57

SQL構文に間違えがなければ、DAOかADOのEXECUTEメソッドで可能です。

    • good
    • 0
この回答へのお礼

有難う御座います。
insert intoはexecuteは出来ますが、transformは意味が無いです。それは、アクションクエリ
では無いからです。

要は、ここではtransdormとinsert intoを一つのsqlで構築しないとexecuteは出来ません。
そのsqlを教えてほしいのですが。

お礼日時:2015/12/16 13:51

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A