MS Access Tips/Sample and VBA and Blog customize etc...

Accessデータベースファイルを最適化する関数

Accessのデータベースファイルは修正やデータの追加・削除を繰り返すとファイルサイズが肥大化します。またこれを放置すると破損の危険性も高まります。このため、定期的に最適化/修復を実行する必要があります。

エンドユーザーにこの作業を強制するのもなかなか難しいものです。オプションで「閉じるときに最適化する」というのがありますので、それにチェックを入れておけば閉じるときに自動で最適化が実行されます。
ただ、データペースをフロントエンドとバックエンドに分割している場合は、バックエンド側のデータベースファイルまでは最適化してくれません。

そこで、VBAで最適化する関数を紹介します。フロントエンドファイルを閉じるときにこの関数でバックエンドファイルを最適化することが可能になります。

最適化関数タイトル

難易度:

Shell関数でAccessのコマンドラインで最適化

Accessを起動するとき、コマンドライン スイッチに /compact を指定すると最適化します。

Access のコマンド ライン スイッチ - Access - Office.com

これを使って、Shell関数でAccessを起動すれば1行のコードですみます。関数にすると下記のようになります。

標準モジュール

使用例

1つのファイルを最適化するだけならこれでも十分ですが、複数のファイルを連続で最適化する場合、非同期で実行されるのでちょっと不安です。また、成功したかどうかの結果を取得することができないので、失敗した場合は後で再試行するいう事もできません。

CompactRepairメソッドを利用して最適化

上記の不満を解消するためには下記の関数を利用します。

標準モジュール

使用例

この関数を実行すると下記のようなセキュリティメッセージがでることがあります。

最適化セキュリティメッセージ

「はい」をクリックすれば最適化は実行されますが、このメッセージがうるさい場合は、データベースファイルがあるフォルダーをオプションのセキュリティセンターで信頼出来る場所として追加してください。これでメッセージ無しで最適化されるようになります。

注意:後者のRepairDb関数は、Access2002以降で動作します。MDBファイルでも使用できます。Access2000以前の場合は、前者のCompactDb関数を使用してください。

拍手する

3 Comments

ルーカス says..."複数端末で使用している場合"

はじめまして。よくこちらのサイトを参考にさせていただいております。
少し疑問がございまして、お尋ねしたいのですが、
複数端末で運用している環境で、端末Aでシステムを使用中(バックエンドmdbにアクセス中)に、端末Bがシステムを終了(フロントエンドmdbを閉じる)した場合、問題は生じないでしょうか?
(CompactDbがエラーになるのかな?)
実際に試していないので申し訳ないのですが、もしご存知でしたら教えていただけると有り難いです。
よろしくお願いいたします。

2015.08.07 15:06 | URL | #E236oH2Y [edit]
hatena says..."re:複数端末で使用している場合"

> 複数端末で運用している環境で、端末Aでシステムを使用中(バックエンドmdbにアクセス中)に、端末Bがシステムを終了(フロントエンドmdbを閉じる)した場合、問題は生じないでしょうか?
> (CompactDbがエラーになるのかな?)

フロントエンドMDBを閉じるときに、この関数を実行しているということでしょうか。

他のフロントエンドMDBがリンクテーブルを開いているときは、最適化できないですね。
その場合は、RepairDb関数はFalseを返します。上記の使用例のコードを見てもらえれば分かると思います。

2015.08.08 21:01 | URL | #5uE6dEgY [edit]
ルーカス says...""

「フロントエンドファイルを閉じるときにこの関数でバックエンドファイルを最適化することが可能になります。」
とありました為、複数端末でシステム使用している環境だとどうなんだろう?と疑問に思い、お尋ねさせていただいた次第です。

>他のフロントエンドMDBがリンクテーブルを開いているときは、最適化できないですね。

やはりそうでしたか。
ありがとうございました。

2015.08.08 22:08 | URL | #E236oH2Y [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/378-d9a1e90b
該当の記事は見つかりませんでした。