關於 Access MDB 修復
修復及壓縮 ACCESS 的 MDB
3 種方式 :
方法 1:
使用 DAO 物件 ( Data Access Object )
設定引用項目 Microsoft DAO x.x Object Library
目前 DAO 物件有 3.51 版的 Microsoft DAO 3.5 Object Library ( For Access 97 以前的 MDB )
及 3.6 版 Microsoft DAO 3.6 Object Library ( For Access 2K 以後的 MDB )
不設定引用 ( Early Binding ) 也可使用 Late Binding 方式來建立 DAO 3.5 或 3.6 版本的 DBEngine
Set dbe = CreateObject("DAO.DBEngine.35") ' 或 Set dbe = CreateObject("DAO.DBEngine.36")
Compact 壓縮 ( Defragmentation ) 資料庫 動作如下 :
語法 :
DBEngine.CompactDatabase OldDb, NewDb, Locale, Options, Password
OldDb : 欲處理之來源 MDB
NewDb : 為處理後之目的 MDB
Locale 參數 :
dbLangGeneral : English, German, French, Portuguese, Italian, and Modern Spanish
dbLangChineseSimplified : Simplified Chinese ( 繁體中文 )
dbLangChineseTraditional : Traditional Chinese ( 簡體中文 )
Options 參數 :
dbVersion10 : M$ Jet db engine ver 1.0 file format while compacting.
dbVersion11 : M$ Jet db engine ver 1.1 file format while compacting.
dbVersion20 : M$ Jet db engine ver 2.0 file format while compacting.
dbVersion30 : M$ Jet db engine ver 3.0 file format (compatible with ver 3.5) while compacting.
dbEncrypt : Encrypt the database while compacting.
dbDecrypt : Decrypt the database while compacting
PS : Jet ( Joint Engine Technology )
Sample :
DBEngine.CompactDatabase "C:\Src.mdb", "C:\Dst.mdb", _
dbLangChineseTraditional, dbVersion40 + dbEncrypt
PS : dbVersion40 請調整成適當的版本
By the way , DAO 3.5 有提供 MDB 修復 ( Repair ) 的方法 :
DBEngine.RepairDatabase "MDB 路徑 + 檔名"
PS : 3.5 以後之版本已無此方法 ( 已併入 CompactDatabase )
================================================================
方法 2:
使用 JRO 物件
設定引用項目 Microsoft Jet and Replication Objects X.X library
語法 :
JetEngine.CompactDatabase(SourceConnection, DestConnection)
參數 :
SourceConnection : String 值,指定與欲壓縮之來源資料庫的連接。
若 SourceConnection 指定的資料庫已經開啟,就會發生錯誤。
DestConnection : String 值,指定與壓縮後才建立之目的地資料庫的連接。
若 DestConnection 指定的資料庫已經存在或已經有相同名稱的其它檔案存在,就會發生錯誤。
Connection String :
屬性 | 說明 |
Provider | 指示提供者的名稱,用來連接到資料來源。 |
Data Source | 指示資料庫的名稱。 |
User Id | 若來源資料庫設有安全保護時,指示使用者的名稱。 |
Password | 若來源資料庫設有安全保護時,指示使用者的密碼。 |
Locale Identifier | 指示新資料庫的國別 id。 |
Jet OLEDB:Database Password | 若資料庫設有密保護,指示密碼 |
Jet OLEDB:Engine Type | 指示要開啟或將建立的來源資料庫版本。 |
Jet OLEDB:Registry Path | 設定 Windows Registry 機碼的資訊,包括 Microsoft Jet Database Engine 的值。 |
Jet OLEDB:System Database | 指示系統資料庫的位置。 |
Jet OLEDB:Encrypt Database | 指示是否加密新的資料庫。若此省略此參數,則新的資料庫會和來源資料庫擁有相同的加密。 |
Jet OLEDB:Don't Copy Locale on Compact | 指示資料庫要使用的排列順序,取代任何每個資料行國別設定。(Boolean.) |
Jet OLEDB:Compact Without Relationships | 指示是否複製關係至新的資料庫。 (Boolean.) |
Jet OLEDB:Compact Without Replica Repair | 指示是否試著尋找其它抄本來修復受損複寫式資料庫。(Boolean.) |
Sample:
Dim jro As New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 來源MDB", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 目的MDB;Jet OLEDB:Engine Type= 4"
================================================================ 如果機器上有裝 M$ Access , 也可直接使用 Access 來 Repair / Compact MDB資料庫 或寫程式來呼叫 Access來做 建立 Access 應用程式物件 設定引用項目 Microsoft Access X.X Object Library Dim objAcc As New Access.Application 或 Dim objAcc As Object Set objAcc = CreateObject("Access.Application") 之後 Call objAcc.CompactRepair("c:\A.mdb", "C:\B.mdb", False) 即可 ================================================================ 相關主題參考 : VB.Net 透過 JRO 修復 Access MDB http://blog.blueshop.com.tw/hammerchou/archive/