最適化するには、DBEngine.CompactDatabaseを使用します。
構文: DBEngine.CompactDatabase 最適化元ファイル名, 最適化先ファイル名
最適化する効果として、ファイルサイズが小さくなります。
ファイルサイズが小さくなるということは、検索などの処理スピードが改善されると思いますが、パソコンの性能向上もあり、それがどの程度かは不明です。
ここでは、Access VBAで最適化を実行し、どれくらいファイルサイズが小さくなったかを検証します。
■ 最適化フォームの作成
下のように、[最適化]ボタンと、最適化ファイルを表示するテキストボックスを配置します。
ボタンのクリックイベントと、ファイル選択ダイアログのコードを入力します。
実行画面です。
■ 最適化のVBA
1)ボタンをクリックすると、ファイル選択ダイアログボックスが開きます。
2)ファイルが選択されると、最適化先ファイルを削除します。
3)DBEngine.CompactDatabas で最適化を実行します。
4)最適化元ファイルを削除します。
5)最適化先ファイルを元ファイルにコピーします。
※ 最適化先ファイルの名前を変更する方法もあります。 ここでは、安全のため一応残すようにしました。
Option Compare Database
Public Function SelectFile_FileDialog() As String
Dim dlgfolder As FileDialog
Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"
Application.FileDialog(msoFileDialogFilePicker).InitialFileName = "c:\test\"
Application.FileDialog(msoFileDialogFilePicker).Filters.Clear
Application.FileDialog(msoFileDialogFilePicker).Filters.Add "Access Databese", "*.accdb"
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()
Me!テキスト1 = SelectFile_FileDialog
If Me!テキスト1 <> "" Then
Kill "c:\test\temp.accdb"
DBEngine.CompactDatabase Me!テキスト1, "c:\test\temp.accdb"
Kill Me!テキスト1
FileCopy "c:\test\temp.accdb", Me!テキスト1
End If
End Sub
■ 最適化の効果
最適化前のファイルサイズが、1,183,744Byteです。
最適化後のファイルサイズが、1,134,592Byteです。
結果、49,152Byte小さくなりました。