<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97 VBAの森>縦のものを横に


(4)

7.テーブルに書き込みます。

仕上げはこれ。変数の中に取った答えを、「売上集計」テーブルに代入していきます。

d2.AddNew
d2![1月] = m1
d2![2月] = m2
d2![3月] = m3
d2![4月] = m4
d2![5月] = m5
d2![6月] = m6
d2![7月] = m7
d2![8月] = m8
d2![9月] = m9
d2![10月] = m10
d2![11月] = m11
d2![12月] = m12
d2.Update

これでオッケー。


全部書けました?んじゃあ、コンパイルして、デバッグウィンドウを使ってテスト走行してみましょう。

・・・相変わらず味気ないですけど、なにも起こらず、カーソルが次の次の行でぴかぴかしてるってことは、ちゃんと処理が終わったってことじゃないかなと思います。

いつまでも次の行でカーソルがとまったままだと、おそらく永久ループです。
Do Loopの処理の書き方が、どっか悪くて、いつまでたっても処理を抜けないってことです。
Breakキーを押してプロシージャを止めないと、たいへんなことになりますぞ。

終わったら、保存してプロシージャのウィンドウをいったん閉じ、売上集計テーブルを見てみましょう。どうでしょう。できてます?

これが、縦のものを横にするプログラムの基本型ですね。けっこうタイヘンですよねぇ・・。

んじゃ、テーブルはいったん閉じましょう。




8.2回目の、3回目の・・・・。

今度は売上テーブルの方を見ましょうか。

さて、日がだいぶ経って、売上テーブルの中の伝票が少し増えたとします。
入力し忘れていた伝票が後から出て来て、5月の売上を追加入力したり、いろいろありました。
売上集計はどうなってるかな・・・。下の方に開いてみました。
でも、売上テーブルのデータが変ったからといって、売上集計テーブルの中身は変らないですよね。
売上集計はクエリーじゃないんで、売上テーブルとは何の関連付けもないですから・・・。

↑このテーブルの中身が変ったからといって、↓集計テーブルに即反映されるわけじゃなし!こっちは変らず。

え、なんで?どういう意味????んー、これの意味がわからないと、先行きちょっと厳しいですぞ・・・。
でも、ややこしいお話ではあるんで、整頓して考えてみてくださいね。

そうそう。売上集計テーブルに集計データが入っているのは、さっき作ったプロシージャを実行したから、ですよね。
じゃ、もう一回あのプロシージャを実行すれば、下の売上集計テーブルの方に新しい集計結果が入ってくるはずです。
よしよし、じゃ、またデバッグウィンドウを使って、プロシージャを実行してみましょう。

まだフォームとか用意してないんで、プロシージャの実行はとりあえずデバッグウィンドウからってことで。
まあ練習ですから・・・ついでにこの操作も慣れちゃってくださいね。


あれれ?

あ、そっか・・・。AddNewしてるんだから、2回目に実行したときは、2レコード目に書き込まれることになるのか・・・。

まあ、前の集計データを残していきたいときはこの方がいいですよね。うーんでも、どうかなぁ。今回は・・・。
どうしましょう。これで、プロシージャを15回実行したら、15レコードできることになるんですよね。
でも、必要なデータは常に一番最後の1レコードだけ・・・。

このプロシージャ実行する前に、売上集計テーブルの中のレコード、削除するようにしましょうか。
そういう処理が今後必要になることもあるかもしれないですよね。やってみますか。


これはいわゆる「削除クエリー」というやつと同じ処理を作ります。

でも、「売上集計テーブルの中のレコード全部削除したい」って言っても、中々カンタンにはやってくんないんですよ。
Loopの処理のイメージはご記憶ですか?あれと同じ仕組みを作ります。

Do Until d2.EOF
 d2.Delete
 d2.MoveNext
Loop

これもMoveNextを忘れないように。

この処理を、プロシージャの先頭部分で実行しておきます。そうですねぇ・・・。
Set文の後か、m12=0の後か・・・その辺がいいんじゃないでしょうか。
で、この後、集計するループ文が動いて足し算すれば、常に「売上集計」テーブルの中身は必要な1レコードのみ、ってことになりますよね。

こういう処理は、削除クエリーを作っておいて、このプロシージャの前にでも実行しておいてもいいですよね。
ほんとに、クエリーとVBAはうまく使い分けて効率アップを図っていってください。

さて、改めてプロシージャ実行・・・。
と、今度は1行だけ、最新の集計レコードがテーブルの中に書き込まれた形になると思います。