-PR-
NTTPCのレンタルサーバー
基本情報技術者講座 28,000円から ★ぶっちぎり宅建ライブ開講★

引き続き、300万件のレコードを持つAccessテーブルの操作です。

つまづきながらも、なんとかデータのUPLOADが出来たものの、

集計クエリを作成していたらエラーになりました。解決したので、健忘録として残しておきます。

先に行っておきますが、原因はポカミスですた・・・。役に立たない情報かも。でも!人のエラーみて我がエラー直せ、といいます(いいません)

SELECT 超デカイテーブル.ID, 項目テーブル.項目名, SUM(超デカイテーブル.金額) AS 合計金額
FROM 超デカイテーブル LEFT JOIN 項目テーブル
ON 超デカイテーブル.項目ID = 項目テーブル.項目ID
GROUP BY 超デカイテーブル.ID, 項目テーブル.項目名

↑なんてことない、金額の集計と、項目IDをキーに他のテーブルから名前ひっぱってきて

くっつけているだけのクエリです。項目テーブルの項目IDと項目名の関係は一意の筈です。

上の例は簡易的に書きましたが、実際は複数のテーブルを結合しています。

さて、ここでエラー

「クエリを完了できません。クエリ結果のサイズがデータベースの最大サイズ(2GB)より大きいか、
クエリ結果を一時的に保存するディスクの空き容量が不足しています。」(Access2007)

うーん、集計するわけだから、計算は大変だけど

元よりレコード件数がずっと少ないはずだから、データー容量は少ない筈なんだけどなぁ・・・。

そんなこんなで小3時間以上なやみましたが、ふたを開けてみれば

件数が減るどころか、7倍程に増えていた!!

エラーの原因調査でやったこと:

①とりあえず、1つのIDをサンプリングしてみることに。

→ クエリに「WHERE ID= “0000001”」 を追加。(あとで消す)

IDを1つに絞ったことで、とりあえず実行だけは出来るように・・。しかしまだ原因はわからず。

②集計するまえはどうなっているのかチェック。

→SUM関数を外す

実行してみると、あれ? 異様にレコード数が多い。ざっと7倍・・・?なんで?

③結合先の「項目テーブル」があやしいので、チェックするために項目IDも出力してみる。

→SELECT句に 超デカイテーブル.項目IDを追加

そして項目IDをチェック。何種類かありますが、例えばそのうちの1つ「200」をチェックしてみましょう。

④「項目テーブル」を開き、項目ID「200」のレコードを確認。 項目IDと項目名の関係は1対1の筈だが・・・

→項目ID,   項目名

「200」    「S_GT01」
「200」    「GT01」
「200」    「S_GT01 SMALL」

・・・

 

項目名いっぱいあるーー!! IDに対して名称は1つだと聞いていたのですが、違ったみたいです・・。

そんなこんなで、ただでさえ超デカイテーブルのレコードが何倍にも膨れてエラーとなっていたのでした。

お客様に確認したら、項目名は微妙な違いがあるものの、一つの製品をさしているので

どれか一つで良いとのこと。 幸い項目テーブルにユニークな数値をもつカラムがあったので

MAX関数を駆使して、項目名は最新のもののみを表示するように修正し、

めでたくエラーがでなくなりました。

悩んでいたエラー原因が大したことないと嫌になりますネ

関連記事:

  1. 【ACCESS VBA】パラメータが少なすぎます。6 を指定してください。
  2. ACCESS スピードアップ方法まとめ
  3. 【Access VBA】エラー複雑すぎるため評価できませんの原因
  4. 【Access VBA】エラー:データベースの形式”~.accdb”を認識できません。
  5. 【Access VBA】SQLite接続設定(Win7 Access2003環境)

関連記事はYARPP関連記事プラグインによって表示されています。

Comments are closed.