● Access2000で困ること・できないこと
Access2000やAccess2010などは、ライバルソフトのファイルメーカやJustsystemの「UnitBaseなどと比べると、できないことだらけ、かもしれません。
ちなみにですが「UnitBase」は高額ソフトですからAccessよりもできてあたりまえですか・・・。
同時ログインが5ユーザーまでで100万、10ユーザーで200万、年間20万必要ですものね。
ただ、AccessのコスパとUnitBaseのコスパを比べると、「自分に対する"独学や制作の時間・時給"を考えたら同じくらいかと思いますし、UnitBaseの対費用効果は顧客規模と用途が本当にマッチするなら決して高額ではないと思います。
零細や中小でも少し大きな組織で、ユーザー別(役職別)のセキュリティでしっかりしたものが必要なら圧倒的にUnitBaseのほうがいいような気はします・・・。
クライアント台数が10台以下で、ユーザー別(役職別)のセキュリティが要らないなら特別なことをしない事務系ならAccessでしょうか・・・。グループウェアはクラウド利用でUWSC連携でなんとかなりそうです。多少のユーザー別セキュリティが必要ならAccess+SQLServerの簡易無料版という方法もあります。
以下は、Access2000を使っていた時分で、すでに困っていたことです。
今でも似た感じかもしれません。
・mdbファイルを分割すると(リレーションの設定はできるけどその中の)参照整合性の設定ができない。参照整合性が設定できるのは、1つのmdbファイルにすべてのテーブルが格納されている場合だけです。(リンクテーブルを扱うときも、リンクテーブルがすべて1つのmdbファイルに格納されている必要があります。
・半角スペースを使った複数キーワードでのAND検索ができない。ワイルドカードの「*」を使う必要がある。他の列、他のテーブルにまたがった検索も作り込まないとできないので面倒
・mdbファイルだと、セキュリティ設定が簡易的なものしかできないと思ったほうがいいです。例えば役職別のセキュリティ(ユーザー別セキュリティ)の設定は、一応できるといえばできますけど、mdbファイルを分割してしまうと機能しないですし、よくわからないし文献も少ないです。また機能そのものも貧弱なのでメリットがありません。そこまでしたいなら、SQLServer+ADPファイルでやるほうがいいです。
・Accessの中にもピボットテーブル機能があるので一応組み込めるのですが、1つのピボットテーブルを組み込むだけで恐ろしく容量が肥大化してしまうので、いくつも組み込めません。AccessからCOMオートメーションで「Accessのテーブルやクエリをソースにしたピボットが入っているxlsファイル」を動かすほうが容量も少なく済むし、細かいことやその他の色々なことができます。グラフも同様だったかと思います。
・ドラッグ&ドロップを使ったプログラムがしょぼいものしか作れない。ちゃんとしたものをと思うと、VBなどでOCXを作って組み込んだりが必要らしいです。
・それもあって、グループウェア的なものが作れない。
・ブラウザ経由でデータベースを操作するようなWebアプリケーションも一応、簡易的なものが作れるけど、外部からアクセスするようなものはセキュリティ上作ってはいけない(イントラネット内で参照用として使う分には良いと思う=ピボットのHTMLへの埋め込みなどはできる)
・スマホ対応のソフトは作れません。ファイルメーカの今の最新バージョンを使うほうがいいと思います。
・mdbファイルにてAccessが力を発揮するのは、mdbファイルをとにかく分けて、テーブルもプログラムもどんどん機能別目的別にバラバラに小さくサブシステム化していくやり方です。たとえば顧客マスタや商材マスタ、売り上げ明細、といったデータ量の増えそうなものやメンテをバラバラに行いたいものは、関連テーブル単位でまとめて全部独立したmdbにします。また、そのテーブルのフォームやレポートも全部リンクテーブルを使ってばらばらのmdbファイルにして配置します。そのほうがメンテも絶対に(圧倒的に)ラクだし、サーバのoplock設定さえしてあれば、20台くらいのクライアント数なら巷で言われるようなファイル破損も起こりません(実はそういうシステムを今でも稼働させています。クライアント数30台くらいですが、oplock設定をして12年以上、一度もファイル破損したことがありません。なのでサーバのoplock設定をしても破損を起こす人は本当に考えられないような無茶苦茶な作り方をしている人だけだと思います。12年以上もバージョン2000使うなと叱られそうですが、セキュリティは一応気にしてるので何とかなってます。でもマネしないでください・・・・。)。ただ、そうすると、参照整合性とセキュリティは捨てないといけません。参照整合性の機能は自前で作る必要があります。そう難しくはありませんが・・・。
・20台くらいのクライアントと1台のサーバ(2000とか2003とかXPになってしまいますが)でクライアントサーバもどきな使い方ができるけれど、データ量が数十万件あって、それを10人くらいで同時に使おうと思うと、連結フォームを使うと常時全員が1つのテーブルに接続している状態なので、不具合が起こるかもしれない。10人以上が一斉にサーバのデータを扱うときは、サーバデータを一時テーブルにいったん吸い込むなりなんなりして、更新時以外はサーバにつないでいないようにしたほうがよい。Accessは連結フォームが売りで、連結フォームのおかげでシステム構築工数も激減できるのが売りの1つのソフトなんですが、mdbで10台や20台が一斉アクセスするような使い方をする場合は、ぜんぜんそれが利用できません。(つまり、面倒くさいといえばそうかもしれません・・・。ただ、VBAやSQLでそのへんは効率化はできますが・・・。)
・結局20台くらいのクライアントと1台のサーバ(2000とか2003とかXPになってしまいますが)でユーザー別セキュリティを含め、色々高度なことがやりたいなら、SQLServer+ADPファイル、という形になってしまいます(今なら azure というやつでしょうか??よくわかってなくてすみません)。しかし、勉強量がハンパない状況になってしまうので独学は難しいです。私たちのような素人(兼任社内SE)にはSQLServer+ADPファイルはかなりハードルが高いです。
・mdbファイルではストアドプロシージャが使えない。パススルークエリがその代用?
ただ、4、50万件のデータを扱うなら、実データ蓄積用のDBのコピーを検索用のDBとして配置し、問い合わせなどはそちらでやるということにすれば、処理速度的な問題はそれほど大きくなりません。
セキュリティを捨てれば、mdbでもかなり大量のデータをそこそこの処理速度で扱えます。
トランザクションも特に考える必要もありません。
ADPファイルではストアドプロシージャが使えます。
古い情報ですが、一応参考URLです(ADPファイルがまだ使われていたころの記事です)
https://www.bitpower.co.jp/software/details/adp.asp
・クライアントサーバもどきな形態で使う場合は、ファイルサーバのoplock設定をしないと同時アクセス時にかなりの確率でmdbファイルが壊れます。(逆に言うと、oplock設定をすれば、まず壊れないです。)
※関連記事
Access2000でできること・便利なところ
https://euc-access-excel-db.com/tips/ct07_se/ct075010_ac2ktips/access2000_can
Excelユーザーフォームの50倍、効率的なAccessフォームを作る方法(2つのカード形式画面の区別とサブフォームの利用)
https://euc-access-excel-db.com/tips/ct07_se/ct075010_ac2ktips/access-form01