なかなか最適化がうまくいかなかった・・・
海外のサイトを参考に、やっと最適化できました。
スタンダードアロンなので、*.accdbの最適化は、下記のようにしました。
最適化前ACCDB、最適化後ACCDBは、フルパスで指定します。
Private Sub フォーム_Close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
'▼参照設定:Microsoft.Office.Interop.Access.Dao
Dim _access2007 As New DBEngine
Dim _password As String = GetConnectStrACE(True, ACCDB_PASSWORD)
Try
ERRMSG = ""
'▼.accdbを最適化する
'▼(1)最適化後ACCDBを削除する
If IO.File.Exists(最適化後ACCDB) Then IO.File.Delete(最適化後ACCDB)
'▼(2)最適化前ACCDBを最適化後ACCDBに移動する
IO.File.Move(最適化前ACCDB, 最適化後ACCDB)
'▼(3)最適化後ACCDBを最適化前ACCDBで最適化する
_acc2007.CompactDatabase(最適化後ACCDB, 最適化前ACCDB, Nothing, Nothing, _sPWD)
System.Runtime.InteropServices.Marshal.ReleaseComObject(_acc2007)
_acc2007 = Nothing
'▼(4)最適化後ACCDBを消去する
IO.File.Delete(最適化後ACCDB)
Catch ex As Exception
ERRMSG = ex.Message
Finally
_access2007 = Nothing
_password = Nothing
End Try
If ERRMSG <> "" Then MsgBox(ERRMSG, MsgBoxStyle.Critical, "エラー!!")
End Sub
Public Function GetConnectStrACE(ByVal bUseDBPassword As Boolean, ByVal sDBPassword As String) As String
Dim _sConn As String = ""
If (bUseDBPassword) Then _sConn = ";pwd=" & sDBPassword Else _sConn = ""
GetConnectStrACE = _sConn
End Function
参考までに。