<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
  (←別ウィンドウでサブメニュー)



17.「mdbファイルを共有する」

このコーナーのおしまいに・・・。
「mdbファイルを共有して使う」ということについて、お話します。
ちょっと難しいお話ではあるんですが・・・。

今や、「ネットワーク」って、当たり前の考え方ですよね。
皆さんの会社の中も、いろんな形で社内のPCがつながってて、プリンタを共有したり、社内でメールを送受信したり、そういうことはごくごく身近なことだと思います。

見積書の発行とか、交通費の精算とか、そういう「会社の中のオシゴト」にMS-Accessを活用されている方の中には、「mdbファイルをサーバーに置いて、みんなで共有して使おう」って、そう思ってる方もいらっしゃるかもしれません。
でも、よく考えてください。
mdbファイルはデータベースですが、パソコンのファイルでもあります。
パソコンのファイルって、複数の人が同時に開いて同時に編集できます?
MS-Excelのファイルを5人で開いて、みんなで同時に同じシートの中に分担してデータ入力したりできます?
MS-Wordの文書を6人で新規に作成して2ページずつ受け持って入力したり、します?
しないですよね。できないです。
パソコンのファイルというのは、基本的に、編集できるのは一人。残りの人は、そのファイルを開くことができなかったり、開いて見ることができたとしても「読み取り専用」で編集できなかったり・・・。
複数の人が同時にひとつのファイルに対して書き込みをしたりということは、できないものだと思います。

MS-Access はどうでしょう。
とりあえず、複数の人が同時に同じMDBファイルを開くことは、できます。
(排他モードという状態で開いていなければ)みんなで同時にテーブルに書き込みしたりフォームやクエリを開いたりすることができます。なぜならMS-Accessでは、レコード単位で物事を考えるからです。
リレーショナルデータベースというものは本来、「大勢でデータを共有できる」という一面を持っています。
MS-Accessも、リレーショナルデータベース的構造を持っています。

でも、それでも、MDBはパソコンファイルです。
複数の人が同時に開いて使うなんてことは考えられてない「パソコンのファイル」です。



MS-Accessに限らず、ってことで、広く「データベース」というものの構造を、おさらいして考えてみましょう。


データベースというのは、「データの集まり」のことを言うわけですが、今はもう「データベースを管理するためのソフトウェアとかツールとか」のことをそのままデータベースと呼んでしまってる場合がおおいですね。
データを「テーブル」という単位で固めて、「顧客の情報」とか「商品情報」とか「売り上げ情報」といった「情報の種類ごと」にテーブルを作っていくことで、コンピュータの能力を最大限に活かしてデータ管理ができるよう、いろいろと工夫されて作られてるもののことを「データベース管理システム」と言い、これがもうすでに「データベース」そのものって感じになってます。
Oracleとか、SQLServerとか、DB2とか、Sybaseとか、MySQLとか、PostgreSQLとか・・・。そういうのが「データベース管理システム」にあたります。

で、このデータベース管理システムによって管理される「コンピュータ内のディスク領域」に、テーブルとかいろんな設定とかをしてやることで、安全に、スピーディーに、正確に、データを管理していくことができるわけです。
利用者たちは、データベース内に作成されたテーブルから自分の仕事に必要な情報だけを取り出し、画面に表示したり、印刷したり、必要な情報をテーブルに入力したりということを日々繰り返していきます。

「データベース管理システム」が網羅する範囲は、上の図で行くところの緑色の丸の部分です。
ここの部分だけです。
この部分をしっかり正しく安全にスムーズに保つために、データベース管理システムは日々働きます。

でもって、利用者たちはそれぞれ、「画面に表示する」とか「印刷する」とか「伝票入力する」とかいう機能を、おのおののPC内に用意しなくてはなりません。
言うなればこういう機能の部分は、データベースの範疇ではないのです。

 ・データベース内のテーブルから、必要な情報を取ってきて画面に表示したり
 ・データベース内のテーブルから、必要な情報を取ってきて見積書として印刷する、とか
 ・データベース内のテーブルに、入庫情報を入力する、とか・・・。

そういう仕組みや画面のデザインや印刷物などなどは、データベースとやり取りが可能な開発ツールとかを使って、別途開発していく必要があります。
VisualBasicとかVC++とか、PHPとかASPとかいうのも、その類ですね。
あとは、データベースからデータを取ってくるところ、いわゆるSQLっていうデータベース言語が必要になったり、データベースに物理的に接続するために必要なもの(ODBCとかoo4oとか)も、そうした開発ツールなどにあわせて選んでいかなければなりません。

そう・・・ひとくちに「データベース」っていったって、Oracle買っただけじゃ、まだまだ「はじめの一歩」なんですよ。
開発ツール選びから設計、プログラミング・・・と、いろんなことをやらないといけない。
いいデータベースを作成していくためには、開発ツールにも精通してないとならないし、プログラミングの知識も必要。何よりも、テストや研究を重ねていく「パワー」が必要になります。
思わず顔をしかめたくなっちゃいますが、これが、ふつうなんです。


でも・・・そこまで労力かけてられないし、開発ツール選びとかプログラミングとか言われても、そんな技術も知識もないよ・・・。
という場合に・・・。

  テーブルと、
  テーブルからデータを取り出したり入力したりするしくみと、
  入力画面を作る機能と
  印刷物を作る機能と
  ひとつのアプリケーションソフトを作成していくためのその他もろもろのいろんな機能と・・・

が、手軽に簡単に利用できるようひとつにまとまってたら、どんなに便利だろう・・・。

と、いうのが、MS-Access のコンセプトです。
構築の難しいデータベース環境を、ひとつのMDBっていうファイルの中にぎゅっと押し込めて、この中でいろんなことができるようになってるんですね。MS-AccessでMDBファイルをひとつこしらえれば、その中にテーブルも入力画面も印刷物もみんな一緒に作っちゃうことができるんです。
開発ツールの選択とか接続のためのなんとかかんとかとか、そういう難しいことは考えなくても、このMDBの中でそこそこできちゃうんですよね。そのあたりは、今までいろいろと見ていただいたとおりです。



でも・・・。
今度、ひとつのMDBを複数の人で同時に開いて入力・・・とかいうことになると、極端な話、下の図のようなイメージになるわけです。できるかできないかと言ったら、同時に開くことはできます。

でも、MDBファイルはパソコンファイル。
複数の人が同時に開いてテーブルへの入力とかレポート出力とかやってると・・・。
MDBファイルの破損などのトラブルが発生する可能性が高くなります。

それこそ、「1冊の電話帳を3人で同時に掴んで、広げて、好き勝手なページを見ようとしている」のと同じことです。
この電話帳、破けたりしませんかねぇ。
破けないかもしれないし、破けちゃうかもしれないですよね。
少なくとも、ひとりで見ているときより、破ける確立は高そうじゃありません?



どうしても、ひとつのMDBファイルを複数の人で同時に開いて使いたい場合は、

  ・テーブルだけのMDBファイル
  ・それ以外のオブジェクトの入ったMDBファイル

のふたつのMDBファイルを用意します。
で、前者をサーバー側に、後者を各PCに保存しておき、後者を通じて、前者のMDB内のテーブルを使う、というスタイルを取ります。この際、下の図で行くところの紫色の矢印の部分を、「テーブルのリンク」などの機能を利用して作りこみます。

これなら、同時に同じMDBを参照していますが、同時に同じMDBを開いていることにはなりません
つまり少なくとも、さっきの例よりは、トラブルも少なく、MDBファイルが壊れる心配も、あんまりしなくていいということです。
(かといって「壊れない」という意味ではありません。そんなこと誰も保証できないしさ)



で、もし・・・。
データの入力件数とか、利用者の数が3人ではなくて10人とか20人とかかなり増えてきそうな場合とかは、いずれは、「テーブルだけのMDB」の部分を、SQLServerなどのほかのデータベースに置き換えていくとか、検討するとよいでしょう。
なぜって、だって、MDBファイルには「最大2GBまで」っていうファイルサイズの制限がありますでしょう。
レコードの削除が頻繁に行われるシステムですと、ときどき最適化してやらないとならなかったりしますし・・・。

もちろん、最初から「これはもうどえりゃあデータ件数になりそうで、2GBなんてもうとんでもない」ことがわかっているなら、MS-Access など使わないほうがいいかもしれませんけれどね。。。
MDBファイル自体、れっきとした「データベースファイル」なんで、他にさらにデータベースを設けるなんてちょっともったない感じもしますけれど、MS-Accessは大勢で同時に大量のデータを扱うのには、あまり適してないようです。
なので、もうのっけから「1年後にはデータ量が1億件を超えます」なんてことがわかってるんであれば、こういった移行を検討していかれるのがいいかもしれないですね。



「共有」っていう意味では、最近では「MS-Accessのデータをブラウザから見れるようにしたいんですけど、どうすればいいんですか?」なんてこともよく耳にします。
でもこういうのは、MS-Accessだけでは、作れません。
はっきり言ってMS-Accessとはちょっと違った世界のお話です。
構築自体は、技術的にはそんなに難しくはありませんが、手間がかかります。はっきりいって面倒くさいです。

どうしても、っていう方は、「Webサーバー」とか「Webアプリケーション」なんていう内容の書籍を1冊2冊買って、まず概要を理解なさるのがよいでしょう。
どっちかというと、MS-Accessの知識よりも、ブラウザとかWebサーバーの知識のほうがたくさん必要になります。
上の図で見ておわかりのとおり、フォームとかレポートの部分がブラウザに置き換わるわけですからね・・・。

「簡単にできるんならやろうと思ってたけど、大変なら、とりあえずいいや」っていう方もいらっしゃると思いますんで、「Webサーバー」というものに対する理解を深めてから、どうするか検討されたほうがよいと思いますよ。



MS-AccessはMS-Excelなどのソフトと似たような感じの画面の作りになってるし、パソコンソフトには違いないので、こういう様子がすごく掴みにくいと思うんですよね。でも、根本的には「リレーショナルデータベース的考え方」を持ってます。
その反面、誰でも手軽にデータベース環境を作れるようにと、ひとつのデータベースをひとつの「パソコンファイル(MDB)」として作っていくようになってます。なのでこの時点で、他の「リレーショナルデータベース的考え方」の製品群と比較することもできなくなってるわけです。
2GBなんてファイルサイズ、「パソコンのファイルサイズ」としてはエラくデカイですけど、リレーショナルデータベースの世界では、「テーブル」などをひとつのファイルとして扱ってるわけじゃないので、こういう考え方はないのです。

こういうことを頭に入れてからでないと、他のDB製品と比較することはできないんじゃないかと思うんですが、Oracleなどを普段よく使っている技術者の人の中には「MS-Accessは欠陥商品」とか平気で言ったりする人を見ると、うーんそれはどうなんだろうって思っちゃうし、また、MDBファイルをサーバーに置いて5〜6人で同時に開いて平気で使ってる人の話を聞くと、うーんそれはどうなんだろうって思っちゃう。

よく考えるとMS-Accessって、なんかすごく中途半端な感じがしますね(笑)
リレーショナルデータベースなのにパソコンファイルなんですよね。
大勢の人間が大量のデータを扱うように考え出されたデータベース構造を持ってるのに、パーソナルな使い方をするべきなんですよね。
うーん、なんか、すごく中途半端だ・・・。

わたしは、MS-Accessの基本を理解して、きちんと設計して、こまめにバックアップとって運用していけば、けっこう「大勢でデータ共有する」ようなアプリケーションにも耐えられると思うんです。かなりのデータ量を蓄積/分析するような業務に使ってるケースもけっこうありますよ。
でもそれは、「MS-Accessの基本を理解して、きちんと設計して、こまめにバックアップとって運用していけば」ってことがポイントになります。会話しているうちにここが抜けちゃって、「MS-Accessで大勢でデータ共有するようなアプリを作れる」って、主語と述語だけになっちゃうことってよくあるんですよ。で、最後は責任転嫁。ひどい話です。
だから、一般の書籍などでは「MS-Accessは大勢で共有するようなデータベース作りには向かない、あくまでもパーソナルデータベースである」って文章になってること、多いんじゃないかと思います。
読んでる人がみんながみんな、責任を持ってデータベースと向き合ってる人とは限らないですからね。
なんかトラブルが起こったとき「この本に書いてあったから」とか、責任押し付けられたらたまらないですし・・・。


データベース作りの難しさはそこにあります。それはMS-Accessに限らず、です。
ソフトの使い方が難しいわけじゃありません。

 ・MS-Accessって何件くらいまでデータの入力ができるんですか
 ・MS-Accessで作ったデータベースって、何人くらいまでなら共有しても大丈夫ですか
 ・MS-Accessのファイルのサイズって、どれくらいが適当なんでしょうか

こういうことを「自分で見極められる技術」を持つこと・・・。
いや、技術っていうより、自分で責任を持つ、っていうことかな・・。
パソコンのソフトってある意味、ソフトの中の制限事項や機能に守られてる一面がありますが(データの件数とかファイルサイズとかって)、データベースの世界って、こういうことは自分たちで決めていかないとならないんです。
決めるっていうか、実際に運用してみて、様子を見ながら、っていう感じになりますよね。きっと。



そして、それを支えるのは、「人の輪」。データベースを運用するために一番大切なものです。
「ユーザーが開発者を信頼してない」「開発している人がユーザーをバカにしている」←こういうケース。
「開発者がMS-Accessをバカにしている。信用してない」←これも。
最悪です。。。
結果的に余計な仕事が発生して、運用が大変になります。
こういう職場環境では、どんな立派なプロダクトをそろえたところで、大勢でデータを共有するようなデータベース作りは、無理なんじゃないでしょうか・・・。

どんなデータベース製品を使っていても、きちんと設計しないで無駄なデータや無駄な処理ががしがし走るようなデータベース作っちゃったら、製品の名が泣きます(金かけていいプロダクトそろえてる人って、製品名に胡坐かいてることありますよね)。
高級車乗ってたって遅刻しまくって人に迷惑かけまくってる人はアホです。
(まあこういうひとは、車持ってるっていうステイタスだけで満足なのかも・・・・。「Oracle使ってます」だけで終わっちゃってる人もたまにいますしね)
お金をかけなくても、高い技術を持ち合わせていなくても、知恵と工夫でしっかりしたアプリケーションを作ることは可能です。
MS-Accessはそれを実現させてくれるソフトウェアだと、わたしは思ってます。

最悪なのは・・・。
「サーバーなのかクライアント側なのか、区別がついてない人」かもしれないです。
今、サーバーのディスクなのかクライアント側のローカルディスクなのか、ネットワークドライブを割り当てて、違いをあまり意識せず使えちゃえますからね・・・。

でも、もし、「部門内でデータを共有して使っていきたい。あまり大掛かりなデータベースを構築できるようなゆとりはないので、なんとかMS-Accessだけで作りたい」っていうのなら、大まかに、社内のネットワークの状況とか、把握しておいたほうがいいですよ。少なくともMDBファイルがどこに保存されているのかよくわからない状態で使うのは、よくないです。



ふう〜。
いろいろとお話をしてまいりましたが、いかがでしょう。

ひとくちに「データベース」といっても、けっこういろいろ考えなくちゃいけないことがあって、大変ですよね。
でも、がんばって乗り越えて、「データベース作りが楽しい!」って思えるようになってってくださいね。