MDB資料庫壓縮方法

來源:互聯網
上載者:User
資料|資料庫|壓縮  
MDB資料庫壓縮方法

jimzj@21cn.com

 

雖然說MDB資料庫功能不是很強大,但時由於在WIN x系統中已有預設的驅動程式,所以不用另外像SQL,SYBASE一樣安裝一個管理驅動,而且攜帶方便,很多的小應用程式或網站還是採用MDB資料庫。經常操作MDB資料時,就會經常碰到要對資料進行壓縮,下面的我在網上找到和自己使用的經驗寫一下關於在各種環境中壓縮MDB資料庫的方法,提供大家參考:

 

一、ASP或VB中壓縮

以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來壓縮 Microsoft Access 資料庫,RepairDatabase Method 來修複損毀的 Microsoft Access 資料庫。可是自從 ADO 出來之後,也提供瞭解決方法,不過有版本上的限制!限制說明如下:

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在下載之前先到 VB6 中檢查一下,【工程】【設定引用項目】中的 Microsoft Jet and Replication Objects X.X library 如果已經是 2.1 以上的版本,您就可以不用下載了!在您安裝了 MDAC 2.1 或以上的版本之後,您就可以使用 ADO 來壓縮或修複 Microsoft Access 資料庫,下面的步驟告訴您如何使用 CompactDatabase Method 來壓縮 Microsoft Access 資料庫:1、開啟一個新工程,點選功能表中的【工程】【設定引用項目】。

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

二、DELPHI中壓縮

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;

三、C++ Builder中壓縮

C++ 中在網上並沒有找到很好的方法,但是根據我原來所作的建立MDB資料庫方法,也找到了一個相對實用的的壓縮方法;

1、  建立MDB檔案的函數

#include <ComObj.hpp>

bool CreateAccessFile( String stFileName )

{

    if( FileExists( stFileName )) return true ;

   

    Variant     vCreateAccess;

    Procedure   PCreateAccess( "Create" );

 

    PCreateAccess << "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + stFileName ;

    vCreateAccess = CreateOleObject( "ADOX.Catalog" );

    vCreateAccess.Exec( PCreateAccess );

 

    return ( FileExists( stFileName )) ;

}

//---------------------------------------------------------------------------

2、  由OLE想到的功能來實現壓結合實際的功能

#include <ComObj.hpp>

void CompactDatabase( String stFileName )

{

Variant     vCreateAccess;

    Procedure   PCreateAccess( "CompactDatabase" );

      

       String stTempFile = "Temp.mdb" ;

       if( FileExists(stTempFile)) DeleteFile(stTempFile) ;

    PCreateAccess << "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + stFileName + ";" ; //如果有密碼請加上後面這一句Jet OLEDB:Database Password=password;" ;

    PCreateAccess << "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + stTempFile  + ";" ; //如果有密碼請加上後面這一句Jet OLEDB:Database Password=password;" ;

    vCreateAccess = CreateOleObject( "JRO.JetEngine" );

vCreateAccess.Exec( PCreateAccess );

//代替原來的資料庫

CopyFile(stTempFile.c_str(),stFileName.c_str(), (int)false ) ;

DeleteFile(stTempFile) ;

              }

四、Vc中壓縮

#import "C:\PROGRAM FILES\COMMON FILES ystem\ado\MSJRO.DLL" no_namespace  Add the following (specifying your own source and destination database paths) to the .cpp file where you
want to compact the database:


try
{
  IJetEnginePtr jet(__uuidof(JetEngine));
  jet->CompactDatabase(
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb",
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;" \
        "Jet OLEDB:Engine Type=4");
}
catch(_com_error &e)
{      
  ::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;    
}

 

更具體的E文可以看微軟的文章:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;230496


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。