2025年4月7日月曜日

2GBの壁ギリギリでaCceSSを使いこなす。そのやり方はこうだ。

 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 件のコメント:

コメントを投稿