vb.net 302号室:Accessデータベースの最適化

スポンサーリンク

ExcelからAccessデータベースの最適化をする

Kappo
Kappo

Accessのデータベースって、テーブルデータを削除、追記、追加などしていく内に、どんどんファイルサイズが大きくなっていきますよね
そのまま放置しているとだんだんモッサリ感でてきませんか?
また、Accessでデータベースを開いて最適化する・・・って面倒だし、つい忘れてしまうことってありますよね

この部屋では、ExcelからAccessのデータベースを最適化する処理をサブルーチン化して掲載していますよ!!
別部屋「404号室:Accessデータベースのテーブル情報を削除」などを行った後にこのサブルーチンを実行するとスムーズかなと思います(Kappo談)

また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください。

※テーブルの作成は 「VBA:Accessデータベースの情報を取得ー別部屋」を参照してください

データベース(Access)の準備が出来たので取得のプログラムを記述します

コマンドボタンがクリックされた時に実行されるプログラム
「Button2」
※「vb.net 301号室:データベースから情報を取得」で作成したフォームにボタンを追加して処理プログラムと記載します

Accessデータベースを最適化するサブルーチンは、メニューー>プロジェクト-モジュール の追加(名前は”MdbCtrl”にしました)して準備します

最適化するサブルーチン
・引数:mdbFolder=データベースのフォルダ
    mdbName = データベース名
・戻り値:正常終了=True
     異常終了=False
最適化の手順
①データベースを別名で最適化
②元データベースを別名にしてバックアップ(上書きコピー)
③最適化したデータベースを元名で上書きコピー
④ ①のファイルを削除

▼プログラム▼


Module MdbCtrl

    '--------------------------------------------------------------------------------
    Public Function MdbOptimization(mdbFolder As String, mdbName As String)

        '----------------------------------------
        Dim Ret As Boolean

        Ret = True

        '----------------------------------------

        Dim mdbFName As String = ""
        Dim afterName As String = ""
        Dim backupName As String = ""
        Dim buf

        mdbFName = mdbFolder & "\" & mdbName    '元ファイルのフルパス

        buf = Split(mdbName, ".")   'ファイル名を拡張子で分ける

        afterName = mdbFolder & "\" & buf(0) & "_after." & buf(1) '最適化の一時ファイルのフルパス

        backupName = mdbFolder & "\" & buf(0) & "_backup." & buf(1) '元MDBのバックアップファイルのフルパス(念のため)

        '----------------------------------------

        Dim Db_Engine As Object

        Db_Engine = CreateObject("DAO.DBEngine.120")    'DAOオブジェクト

        '----------------------------------------

        Try

            '最適化一時ファイル作成:base->after
            Db_Engine.CompactDatabase(mdbFName, afterName)

            'バックアップ:base->backup
            System.IO.File.Copy(mdbFName, backupName, True)

            '最適化を戻す:after->base
            System.IO.File.Copy(afterName, mdbFName, True)

            '最適化一時ファイルを削除:after
            System.IO.File.Delete(afterName)

        Catch ex As Exception

            Debug.Print(ex.Message)

            Ret = False

        End Try

        '----------------------------------------

        MdbOptimization = Ret

        '----------------------------------------

    End Function


End Module

最適化を呼び出すプログラム(例:「Button3」)

▼プログラム▼


    '------------------------------------------------------------------
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim mdbFolder As String 'データベースのフォルダ
        Dim mdbName As String   'データベース名

        '--------------------------------------------

        mdbFolder = "C:\Sample\DB"

        mdbName = "Sample.accdb"

        '--------------------------------------------

        Dim ret As Boolean

        ret = MdbOptimization(mdbFolder, mdbName)

        If ret = True Then

            Call MsgBox("最適化が終了しました。", vbInformation + vbOKOnly, "メッセージ")

        Else

            Call MsgBox("最適化中にエラーが発生しました。", vbExclamation + vbOKOnly, "メッセージ")

        End If

        '--------------------------------------------

    End Sub

※Accessデータベースの元ファイル

①データベースを別名で最適化

②元データベースを別名でバックアップ(上書きコピー)

③最適化したデータベースを元名で上書きコピー
 ※上の画像のファイルサイズを見るとわかりますよ

④ ①のファイルを削除

★★★最適化の終了です★★★パチパチパチパチ

Amazon | 本, ファッション, 家電から食品まで | アマゾン
Amazon.co.jp 公式サイト。アマゾンで本, 日用品, ファッション, 食品, ベビー用品, カー用品ほか一億種の商品をいつでもお安く。通常配送無料(一部を除く)

  

VBAの部屋
スポンサーリンク
シェアする
Kappoをフォローする

コメント

タイトルとURLをコピーしました