見出し画像

Accessをうまく使いこなしましょう

ITサポーターTsuchidaの土田です。システム運用支援を行っていると、前任者が作ったMicrosoft Access(以降Access)のデータベースを修正することが非常に多いです。
これらのデータベースを実際に触ってみると、Accessの使い方として以下の問題があります。

1.単なるExcelの延長で作っている
2.市販テキスト通りに作っている
3.無理な作り方をしている

Accessはデータ管理するデータベースソフトで、簡単なシステムなら作ることができます。簡単なシステムでも自分で作ってみるといろんなことがわかります。そのためにも、上記の問題の対処が必要です。

1.単なるExcelの延長で作っている

Excel2003の頃は、Excelの最大行数が65536行だったため、それ以上に行数のデータの保管にAccessのテーブルを使って、その名残が残っているのです。
Excel2007以降は最大行数が1048576行まで増えたので、100万件以内のデータなら、わざわざAccessにする必要はありません。

ExcelではVlookup関数が1つの項目でしか探すことができないため、2つの項目以上で結合するときに、Accessのテーブルとクエリでデータに項目を付加して、再度Excelファイルにエクスポートしたりします。この作業ならわざわざAccessを使わず、Excelで文字列結合してからVlookup関数を使えば済みます。

単なるExcelの延長で使っているのなら、Accessを使わずにExcelで完結した方がわかりやすいです。この使い方では、Access本来のデータベースソフトのデータ管理にはならないのです。

2.市販テキスト通りに作っている

Accessの使い方で一番問題だと思っているのは、市販のテキスト通りにデータベースを作っていることです。テキストの流れはテーブル→クエリ→フォーム→レポート→マクロです。モジュールはちょっと触れる程度です。
でも実際に作る場合は、テーブルとフォームが最初で、テーブルとフォームの設計が終わってから必要に応じてクエリを作るものです。テーブルのデータが完成しない間はクエリを作ったところで作り直すことになります。

テキスト通りに作ると、フォームがテーブルとクエリとの連結フォームになります。連結フォームって保存したはずのデータが保存されなかったり、保存するつもりがないのに保存されたり、修正するつもりのないのに修正したりでデータの精度が悪くなります。作るのは確かに簡単ですが、精度が高くないデータベースでは困ります。フォームを作るのは多少面倒でも非連結フォームにして、登録ボタンを作ってデータを保存して、データの精度を高めます。

市販のテキストは、Accessでフォームやレポートができるところまでしか紹介していません。でも実務ではフォームをつかったデータ管理ができなければ意味がありません。特にAccessはフォームの作成者と利用者が違うことが多いです。利用者が使いやすいフォームは、非連結フォームにしてボタンでデータを登録するべきです。
私もAccessフォームを修正するたびに、連結フォームを非連結フォームに修正しています。非連結フォームで使いにくいといわれたことはありません。

これはあくまでデータ入力の画面なので、データを表示するだけ画面であれば連結フォームでも構いません。

市販のテキストはあくまで初めて使う人の入門編だと思って、本気で使う場合はネットで調べながら試行錯誤しながら作るべきです。

3.無理な作り方をしている

市販のテキストを使って作ると、テキストにはない操作を行おうとすると、かなり無理なことを作りになるのです。無理な作りの例を紹介します。

①クエリが異常に多い

条件の異なるだけの同じ処理の場合、条件ごとにクエリを作ったりします。この作りをするとクエリが異常に多くなります。クエリごとにレポートが作られているとレポートの数も多くなります。クエリもレポートも多くなると、項目の追加があると修正作業も多くの修正が必要になります。

条件が異なるだけの場合は、VBAでQuerydefを使うことで、1つのクエリを条件を変えて作ることができるので、クエリの数が増えることはありません。

②フォームに非表示のテキストボックスが存在する

他のフォームで共通に使ったり、クエリの抽出条件用にしたり、作成者でないと意図がわからないテキストボックスが非常時で存在します。
フォームを修正するときにこのテキストボックスが必要なのか不要なのか判断が難しくなります。

他のフォームで共通に使うときは、OpenFormで引数をセットして呼び出すか、共通変数用の標準モジュールを作成するかのどちらかです。VBAでコードを書けば、非表示のテキストボックスは不要になります。

③連結フォームのレコード移動

連結フォームは入力したデータがテーブルに反映されるのは、フォームでレコード移動するタイミングなのです。レコード移動しない間は、テーブルには保存されません。
入力中に印刷ボタンでレポートを呼び出す場合に、次のレコード移動しないと更新前のデータで印刷されます。
こういう現象を回避するためにボタンを押すたびに、VBAでフォームをGotoRecordで次のレコードに移動させてすぐにGotoRecordで前のレコードに戻します。

非連結フォームであれば、レコード移動という不自然な作りをしなくて済むのです。エンドユーザが更新ボタンでの更新なら、オペレーションとしてもわかりやすいのです。

Accessとはデータベースと開発環境の一体化

Accessはデータベースソフトといわれていますが、サーバのOracleやSQLserverと呼ばれるDBMS(Database Management System)とは違います。
DBMSはデータベース管理なので、Accessと違いフォームやレポートは作れません。フォーム・レポート・モジュールはVisual Studioなどの開発環境で作るものです。AccessのテーブルとクエリはDBMSの機能で、それ以外は開発環境の機能なのです。

逆にAccessがなければ、DBMSと開発環境の両方を用意しなければいけません。Accessの正しい使い方ができれば、DBMSと開発環境でも応用ができるようになります。いきなりDBMSと開発環境を使うのはハードルが高いので、まずはAccessで慣れておくのもいいです。

最近はクラウド上でシステム開発ができるようになりました。データベースとフォームの考え方って似ているので、Accessの正しい使い方ができると、結果としてクラウドでシステム開発にも役立ちます。SQLの使い方までわかると、ITベンダーがそれくらいできるでしょって言えたりもします。

この記事が気に入ったらサポートをしてみませんか?