Compact and repair Access 2007-2013 database via Vb.net code
最近寫了一個小工具,資料庫使用 Access 2010 的檔案
而 Access 資料庫檔案的特性是檔案大小會持續增大,即使有執行 DELETE 語法
便決定寫一個 壓縮及修復資料庫 的功能,省去對 Office Access 的依賴
上 Google 查了一下,多數都是使用 Microsoft Jet and Replication Objects 2.6 Library 達來成
但是使用 JRO.JetEngine
時,透過 Jet OLEDB:Engine Type=?
指定目標檔案時
最高只能支援到 JET Version 4.x
也就是只能產出 Access 2003 版本檔案格式
後來嘗試使用 Microsoft DAO 3.6 Object Library 來處理
但是 DAO.DatabaseTypeEnum
這個陳述式中只能支援到 dbVersion40
也就是一樣只能到 Access 2003
最後找到了 Microsoft 14.0 Office Access database engine Object Library (版本12)
其中 Dao.DatabaseTypeEnum
最高支援到 dbVersion150
也就是 Access 2013
- dbVersion120 : Access 2007
- dbVersion140 : Access 2010
- dbVersion150 : Access 2013
我電腦中版本的只能支援 Access 2013
有較新的版本應該就可以支援到 dbVersion160
,也就是 Access 2016 和之後的版本
先上程式碼範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
' Microsoft Office 14.0 Access database engine Object Library Imports Microsoft.Office.Interop.Access Public Class AccessFileTools Public Shared Sub CompactDbFile() Dim sFilePath As String = "來源檔案完整路徑(source)" Dim dFilePath As String = "目的檔案完整路徑(destination)" Dim AceDao As New Dao.DBEngine AceDao.CompactDatabase(sFilePath, dFilePath, _ Dao.LanguageConstants.dbLangChineseTraditional, _ Dao.DatabaseTypeEnum.dbVersion140) End Sub End Class |
參數1 和 參數2 是必須參數
參數3 選擇性:語系,大概是會影響到排序
參數4 選擇性:版本,範例是對應 Access 2010
參考:
- JRO 官方說明 CompactDatabase Method (JRO)
- DAO 官方說明 DBEngine.CompactDatabase method (DAO)
- Access 版本比較 Microsoft Access Version Features and Differences Comparison Matrix