2017年3月21日火曜日

【VB】*.accdbを最適化する

なかなか最適化がうまくいかなかった・・・

海外のサイトを参考に、やっと最適化できました。

スタンダードアロンなので、*.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

参考までに。