acccessには2GBの壁がある。不要なテーブルをその都度削除しつつ、この壁ギリギリで使いこなすということもままある。
そういうケースで再び立ちはだかるのが、「accessの最適化はaccessを閉じる時しか出来ない」ということだ。aCCessを開いたままで最適化できると楽チンなのですが、それは出来ない。
2GBが超えが起きるたびに手動で不要なテーブルを削除すればいいのだが、効率が悪い。とりわけ自動化したい場合にはマズイ。
そこで、起動パラメタを見て不要なテーブルを削除し、終了するようにする。
あらかじめ、終了時に最適化が走るようにaccessのオプションの「□ 閉じると最適化する」にチェックを入れておく必要がある。
以下のコードを標準モジュールに記述しておく。そして、accessのAutoExecマクロを登録し、AutoStartProcを呼び出すようにしておく。
起動パラメタは、/cmd 起動パラメタでbatファイルに記述しておけば、VBAではCommandという変数で受け取ることができる。
Public Function AutoStartProc()
If InStr(Command,"Delete")>0 then
DoCmd.SetWarnings False
Docmd.OpenQuery "DeleteTableA" '2GB超えの要因となっている不要なテーブルTableAを削除しておく。
DoCmd.SetWarnings True
Application.Quit ’オプションの□ 閉じると最適化するにチェックを入れておく。この結果、最適化が走る。
ElseIf InStr(Command,"afterDelete")>0 then
最適化後にやりたい処理
Docmd.SetWarning False
Docmd.OpenQuery "QueryA"
Docmd.SetWarngs True
Aoplication.Quit
End If
End Function
そして、バッチファイル(x.bat)は以下のようにを書けば良い。
start /wait abc.accdb /cmd "Delete"
start /wait abc.accdb /cmd "afterDelete"
バッチファイルを作らず、タスクスケジューラの基本タスクで実現する場合、プログラム/スクリプトと引数にそれぞれ、aCCessのフルパス、自分のaCCessファイルのフルパス /cmd "Delete"と指定した基本タスク(テーブルを削除し、最適化を行う)と、引数に自分のaCCessファイルのフルパス /cmd "afterDelete"を指定した基本タスク(最適化後にやりたい処理 )を用意しても良い。
0 件のコメント:
コメントを投稿