お世話になります。
DBにmdbを使用したアプリケーションの終了時に
mdbの最適化を行いたく、
以下のロジックを組み込んでいます。
Private Sub cmdEND_Click()
'---DB
Set 機器管理DB = Nothing
Set KIKPDB = Nothing
Dim dbsNorthwind As Database
Dim OldName, NewName
OldName = "c:\choketu\機器管理.mdb": NewName = "c:\choketu\機器管理B.mdb"
Name OldName As NewName
DBEngine.CompactDatabase NewName, OldName
Kill NewName
'---終了
frmメインメニュー.Hide
End
End Sub
Nameでmdbのリネームの所でパス指定エラーになってしまいます。
パスはあっているのですが、mdbが使用中のために起こるようです。
Set 機器管理DB = Nothing
としただけではmdbを解放した事にならないのでしょうか?
リネームできるように解放するにはどうしたらよろしいですか?
よろしくお願い致します。
機器管理DB.Close
でやってみたらどう?
機器管理DBのオブジェクトって何?
たぁくんさんありがとうございます。
機器管理DBは Database です。
早速試してみます。
今回のケースに当てはまるかはわかりませんが、もし、
データコントロール等非明示的に接続を行うコントロールを使用している場合は、
そのフォームを閉じない限り接続が切れないことがあります。
また、JetのWriteキャッシュやOSのWriteキャッシュ等影響で、
1秒以内のシビアなタイミングでは、こういう問題が起こりえます。
フォームを閉じて、別フォームのLoad時で、
もしくは、最適化用別Exeにて最適化を行うのが安全かもしれません。
#もちろん、他のユーザが使用中でないかどうかも確認する必要があります。
だいさんありがとうございます。
Closeはやってみた所結果は変わりませんでした。
機器管理DB.Close
Set 機器管理DB = Nothing
の後でmdbを見てみたのですが、
ldbが出来ていて解放されていない状態でした。
だいさんのおっしゃる方法で
別フォーム、別Exeで試してみたいと思います。
ありがとうございます。