程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> Access 中如何使用 ADO 來壓縮或修復 MS Access 文件?

Access 中如何使用 ADO 來壓縮或修復 MS Access 文件?

編輯:關於Access數據庫
問題:

Access 中如何使用 ADO 來壓縮或修復 Microsoft Access 文件?
 



 回答:


以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來壓縮 Microsoft Access 文件,RepairDatabase Method 來修復損壞的 Microsoft Access 文件,。可是自從 ADO 出來之後,好像忘了提供相對的壓縮及修復 Microsoft Access 文件的功能。


現在 Microsoft 發現了這個問題了,也提供了解決方法,不過有版本上的限制!限制說明如下:

ActiveX Data Objects (ADO), version 2.1
Microsoft OLE DB Provider for Jet, version 4.0
這是 Microsoft 提出的 ADO 的延伸功能:Microsoft Jet OLE DB Provider and Replication Objects (JRO)

這個功能在 JET OLE DB Provider version 4.0 (Msjetoledb40.dll) 及 JRO version 2.1 (Msjro.dll) 中第一次被提出!
這些必要的 DLL 文件在您安裝了 MDAC 2.1 之後就有了,您可以在以下的網頁中下載 MDAC 的最新版本!

Universal Data Access Web Site

在下載之前先到 VBE 界面中檢查一下,【引用】中的 Microsoft Jet and Replication Objects X.X library 如果已經是 2.1 以上的版本,您就可以不用下載了!

在您安裝了 MDAC 2.1 或以上的版本之後,您就可以使用 ADO 來壓縮或修復 Microsoft Access 文件,下面的步驟告訴您如何使用 CompactDatabase Method 來壓縮 Microsoft Access 文件:

1、新建一個新表單,選擇 VBE 中【引用】。
2、加入 Microsoft Jet and Replication Objects X.X library,其中 ( X.X 大於或等於 2.1 )。
3、在適當的地方加入以下的程序代碼,記得要修改 data source 的內容及目地文件的路徑:

Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\nwind2.mdb", _ '來源文件
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\abbc2.mdb;Jet OLEDB:Engine Type=4" '目的文件

在 DAO 3.60 之後,RepairDatabase Method 已經無法使用了,以上的程序代碼顯示了 ADO CompactDatabase Method 的用法,而它也取代了 DAO 3.5 時的 RepairDatabase method!



 



附注:


1、出現錯誤提示(不能執行這項操作;在低版本的數據庫中該版本的特性不可用。)是因為版本號與你的數據庫格式不符,請看下面的對照表


引擎版本號
Jet OLEDB:Engine Type -> Jet x.x Format MDB Files 
1 -> JET10 
2 -> JET11 
3 -> JET2X 
4 -> JET3X 
5 -> JET4X 

2、其他的壓縮修復數據庫的對象以及方法:
http://support.microsoft.com/default.ASPx?scid=kb;zh-cn;240434
雖然有時可以成功地打開某些損壞的數據庫,但由於索引或表行已損壞,因此數據訪問速度要慢很多。可以運行 Microsoft Access 開發環境中的“修復和壓縮數據庫”實用程序來修復損壞的數據庫。編程時,您可以使用 Jet and Replication Objects (JRO) 的CompactDatabase 方法、Jet OLE DB 提供程序的IJetCompact::Compact 方法,或 Data Access Objects (DAO) 的CDaoDatabase::CompactDatabase 方法,來實現此目的。



 




方法二:

Delphi代碼(未驗證)
//uses ComObj,ActiveX
const
  SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
                                +'Jet OLEDB:Database PassWord=%s;';


function GetTempPathFileName():string;
var
  SPath,SFile:array [0..254] of char;
begin
  GetTempPath(254,SPath);
  GetTempFileName(SPath,'~SM',0,SFile);
  result:=SFile;
  DeleteFile(result);
end;

function CompactDatabase(AFileName,APassWord:string):boolean;
//壓縮與修復數據庫,覆蓋源文件
var
  STempFileName:string;
  vJE:OleVariant;
begin
  STempFileName:=GetTempPathFileName;
  try
    vJE:=CreateOleObject('JRO.JetEngine');
    vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
        format(SConnectionString,[STempFileName,APassWord]));
    result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
    DeleteFile(STempFileName);
  except
    result:=false;
  end;
end;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved