パソコン教室・IT資格マイクロソフトOffice(オフィス)使い方講座Accessレッスンノート 業務内容のデータベース化

業務内容のデータベース化

Access(アクセス)使い方講座のレッスンノート

レッスンノートって?レッスンノートって?

作成中のAccessフォームに難があるとのことでしばらくぶりのご連絡をいただきました。新規レコード追加時に総レコード数の表示が更新されないことと、サブフォームの中からのタブ移動が意図どおりに動かないことが問題です。
フォームを拝見しながら業務内容の説明を行っていただきましたところ、お話が進む中で、作成途中のフォームの元になっているテーブルの構成に問題があるように思われてきました。むしろそちらの方が大きな問題で、またそれを解決することで、現行、複数設置されているサブフォーム間のタブ移動といった問題には直面せずに済むことになるのではないかという見通しが出てきました。

一連の業務をAccessのシステムに載せるためにはいくらかの経験と慣れが必要であるように思います。WordやExcelですとそれらの操作方法を学べばすぐに文書や計算表を作れるようになりますが、Accessの場合は、操作方法を勉強してもそれだけで業務システムが作れるようになるわけではなさそうです。このところがAccessでは一番難しいことなのかもしれません。

お話を伺いながら紙と鉛筆で業務構造を整理し、どのようなテーブル構成と入力フォームにすることが適当かをいろいろと相談しました。その結果、現在の4テーブルに基づいた1メインフォーム+3サブフォームではなく、2テーブル(あるいは4テーブルを2クエリとする)による1メインフォーム+1サブフォームの構成が最も適切という結論にたどり着くことができました。
このタイプのフォームですと以前のレッスンですでに扱ってこられましたので修正も難しくないですね。ただ今回は易しいフォームにするためにテーブル構成を考え直したというのではなく、あくまでも業務内容をAccessの上でシステムとして実現するための最適な構成を考えた結果です。
今回作成してこられたフォームは、これまでExcelで行ってきた入力のイメージを元にして指示を受けたものということでしたが、Excelでのデータ構造をそのままAccessに持ち込むとうまくいかないことが多いものです。
Accessではデータ間の「1対多」関係を扱う仕組みがありますので、その仕組みを業務データに見つけ出してテーブルを分けていくことが重要です。このあたりはAccessの操作の勉強とは別の学びが必要な部分ですので、機会がありましたらまたレッスンで学んでいただければと思います。

なお時間の関係で十分に扱えなかった総レコード数の表示についてですが、テキストボックスのデータソースに=Count("*")-[NewRecord]が設定されていましたが、この式はこれでOKです。NewRecordは新規レコードのときに「真」となるフォームプロパティに関連するもので、「真」は数値で-1になるのがAccessの決まりです(「偽」は0です)から、これを利用して総レコード数-(-1)とすることで、総レコード数+1のカウントを実現しているということです。
これは新規レコードの時に自動更新されませんので、このテキストボックスを、レコード移動時イペントでMe!テキストボックス名.Requery とする必要があります。ただしこの設定だけですと、新規入力時はうまく総レコード数が増えてくれますが、そこからPageDownキーなどでレコードを前後させた時に、今回ご相談いただいたレコード数が増えないままという状況が再現してしまいますので改善策としては不充分ですね。さらに改善が必要です。

余談になってしまいますが、私は以前からフォームでの[CurrentRecord]やレポートでの[Page][Pages]の正体について知らないままにしていることが気になっています。今回のフォームに使っておられた[NewRecord]も同じ仲間ですね。これらがフォームやレポートのプロパティに関連したものであることはわかるのですが、プロパティならばMe.Pagesと書かなければならず、実際、VBAの中ではそのように記述して使います。しかし[Pages]というように両端に[]があるのはどうしてなのでしょう。まるでフィールド名のようです。フォームやレポートには自動的に作られる隠されたフィールドがあるということなのでしょうか。いずれにせよ簡単に使えるものなので問題にする必要はないのですが、わからないままというのはどうも気分のよいものではありませんね。
このレッスンノートを書いたコーチ

重要な操作を効率よくレクチャー。データベースの基礎~VBAまで

AccessPro大親切スクール
星加弘文 (Access)

渋谷・新宿・分倍河原・吉祥寺・笹塚・明大前・下高井戸・千歳烏山・調布・府中・下北沢・...

レッスンノート ページ先頭へ