Accessは壊れやすい?
Accessは壊れやすいと言われています。
今まで何も問題なく動いていたのに、急に見慣れないメッセージが表示されて困ったことがあるかもしれません。
そこで、出来るだけ壊れなくする方法や、困った時の対処方法について記載します。
また、動きが遅くて困った時の考え方についても触れます。
1.Access使用中にエラーが発生した場合の主なメッセージには、以下のものがあります。
Accessの主なエラーメッセージ
- 『モジュールがありません』
- 『直前のコマンド(操作)がキャンセルされました。』
- 『Accessに問題が発生しました。ご迷惑をおかけいたしまして...』
- 『システムで予約されたエラー』
- 『修復する必要があるか、データベースではありません』
- 『データベースが開いているときに、いずれかのユーザーが、Accessを終了しました』
- 『このデータを修復しますか?』
- 『エラーが発生したため、MSACCESS.exe を終了します。プログラムをもう一度開始する必要があります。エラーログを作成しています。』
以上のメッセージが表示された場合は、Accessが壊れている可能性があります。(というか壊れています。)
この場合は「最適化/修復」で使用可能になる可能性が大きく、ほとんどの場合は正常に戻ります。
致命的なエラーメッセージとして以下のものがあります。
- 『権限がありません。』
このメッセージの場合、壊れていて、しかも「最適化/修復」で復旧できる確立は残念ながら低いです。
※これはAccessに限ったことではないですが、いざという時に備えてバックアップはしっかり取りましょう。
2.Accessが壊れる原因や対策について
Accessは本来1人で使用するものとして開発されたため、複数人による同時使用では問題が発生しやすいようです。
では、同時に何人まで使用できるか
- 同時使用人数の制限は255と言われていますが、これはAccessのシステム上の制限です。
- 何人が同時に使用したら壊れるという明確なものは無く、2人で使用していて壊れることもあり、20人で使用しても壊れないこともあるようです。
- 一般的には5人程度が限界と言われることが多いです。
※ただし、同時使用人数が多くなればなるほどパフォーマンスに影響が出るので、先ほどの例は「壊れないかもしれないけど」実用上問題があると言えます。
同時使用人数が増えた場合、SQL Serverにアップグレードした方が良いでしょう。
SQL Serverの場合、いくつかあるエディションの中でも以前のMSDEの位置付けと言えるExpressならデータベースの容量が10GBまで(2008 R2以降。2008以前は4GB)と制限はありますが、MSDEと違ってSQL Server Management Studio(SSMS)でデータベースの操作ができて(※1)、小規模なシステムなら実用上問題無いレベルなので、検討してみる価値は十分にあると思います。
※1:制限はありますが、かなり色々なことができます。

テーマがAccessが壊れやすいと言われている事についてなので、タイトルに「壊れる原因」とありますが、テーブルやフォーム、クエリなどすべてが入っている1つのaccdb(Access2003までのmdb)を共有サーバーに置いて、これを複数で使用するようなことがない限り、それよりも「同時使用人数=パフォーマンスへの影響」の方が大きいです。
ただしレスポンスについては、マシンスペックやネットワークの状況に大きな影響を受けることが多いです。
対策方法は
- フォームやクエリ等とテーブルを別々のaccdbに分けます。
(ここでは、フォームやクエリなどのaccdbを「プログラム用accdb」と呼びます。また、テーブルを格納しているaccdbを「データ用accdb」と呼びます。)
そしてプログラム用accdbからデータ用accdbをリンクして使用します。 この場合、データ用accdbを共有サーバーに置き、これとリンクしたプログラム用accdbを各自のPCのデスクトップ等に置き、こちらを起動して使用します。 - フォームはテーブルを連結せずに非連結で作成します。
ただし、プログラム用accdb内でローカルのワークテーブルとして使用するテーブルについては連結しても問題ないです。 - 定期的にバックアップ及び「最適化/修復」を行います。
その他、データベースの設計等ありますが、これらでかなり回避できます。
3.どのAccessに問題があるのか
ここでは最低限の対策として、プログラム用とデータ用にaccdbを分けた場合とします。
ある一人にのみエラーが出て、他の人は正常に使用出来ている場合
エラーが発生している人のPCのデスクトップ等に置いて使用しているプログラム用accdbに問題があると言えます。 この場合は、使用している「プログラム用accdb」を一旦削除して、問題の無いプログラム用accdbをコピーして、そのaccdbを起動することで正常に動作するようになります。
※いつでもコピーできるように共有サーバーのどこかに置いておくと良いです。
複数の人が使用してエラーが出る場合
「データ用accdb」に問題がある(壊れている)可能性があります。 この場合は「最適化/修復」を行って下さい。 ただし、「最適化/修復」を行ってもエラーが出て「データ用accdb」が復旧できないという最悪のケースも無いとは言えないので、バックアップは必須と考え取っておくようにして下さい。
※あるタイミングで手動で取る方法もありますが、忘れることもあるし、取るタイミングもまちまちだとあまり良いとは言えません。
ちなみに私が開発する場合、以下のようなリクエストがよくあります。
- 使用者の手間を極力少なくしたい。
- バックアップは曜日別に取る。
そこで、その日の最初にプログラム用accdbを起動した人が自動的に「最適化/修復」とバックアップが出来るように、プログラムを作成します。
4.手動による「最適化/修復」の操作方法
Access2003までの場合
- Accessの使用を完全に止める。(誰も使用していない状態にする。)
- 事前に対象となる「データ用mdb」をコピーしておく。(「最適化/修復」中に何か問題が発生した場合に備えて。)
- データ用mdbを開く。
-
- 画面上部のメニューの「ツール」→「データベース ユーティリティ」→「最適化/修復」を選択。
- データベースウィンドウの表示が消え、画面左下に『最適化しています』と表示されます。
- mdbのサイズにもよりますが、通常数秒から数十秒で「最適化/修復」は終了し、セキュリティ警告のダイアログが表示され、「開く」をクリックするとデータベースウインドウが再度表示されます。
- mdbを閉じます。


