Access : データベースの最適化

Access VBAでデータベースの最適化するには、DBEngine.CompactDatabase を使います。

1)ファイルを選択します。
2)最適化前のファイルサイズを取得します。
3)最適化される作業用のデータベースファイル名を作成します。
4)DBEngine.CompactDatabase で最適化します。
5)元ファイルを削除します。
6)最適化されたファイル名を元ファイルに変えます。
7)最適化後のファイルサイズを取得します。
8)最適化前後のファイルサイズをテキストボックスに表示します。



BackHome BackTipsへ Backメニューへ

■実行Access画面
「最適化するファイルの選択」ボタンをクリックすると、ファイル選択ダイアログが表示されます。
Access2007のACCDBファイルか、以前のMDBファイルを選択してください。

終了すると、最適化前後のファイルサイズが表示されます。

Access2007最適化実行フォーム


■ Access VBA 実行コード例
Option Compare Database

'ファイル選択ダイアログ
Public Function SelectFile_FileDialog() As String
    Dim dlgfolder As FileDialog
    'ダイアログのタイトル
    Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"
    '初期のフォルダ
    Application.FileDialog(msoFileDialogFilePicker).InitialFileName = "c:\"
    'フィルターをアクセスファイル(ACCDBかMDBファイル)にする
    Application.FileDialog(msoFileDialogFilePicker).Filters.Clear
    Application.FileDialog(msoFileDialogFilePicker).Filters.Add "アクセスファイル", "*.accdb;*.mdb", 1
    '一つのファイルのみ選択可能
    Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
    If Application.FileDialog(msoFileDialogFilePicker).show = -1 Then
        'ファイルが選択された
        SelectFile_FileDialog = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
    Else
        SelectFile_FileDialog = ""
    End If
End Function

Private Sub コマンド0_Click()
    Dim sfina As String
    Dim beforesize As Long
    Dim aftersize As Long
    Dim wkfina As String
    sfina = SelectFile_FileDialog
    If sfina = "" Then
        Exit Sub
    End If
    '最適化前のサイズ
    beforesize = FileLen(sfina)
        '最適化されるファイル名の作成
    If Right(sfina, 3) = "cdb" Then
        'Access2007の場合
        wkfina = Left(sfina, Len(sfina) - 6)
        wkfina = wkfina + "temp.accdb"
    Else
        wkfina = Left(sfina, Len(sfina) - 4)
        wkfina = wkfina + "temp.mdb"
    End If
    'データベースの最適化
    DBEngine.CompactDatabase sfina, wkfina
    '最適化済みファイルに書き換える
    Kill sfina
    Name wkfina As sfina
    '最適化後のサイズ
    aftersize = FileLen(sfina)

    Me!テキスト1 = "最適化前サイズ: " & beforesize & vbNewLine
    Me!テキスト1 = Me!テキスト1 & "最適化後サイズ: " & aftersize
End Sub



BackHome BackTipsへ Backメニューへ

Copyright(C) FeedSoft