首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

使用 ADO (JRO.JetEngine) 壓縮修復 Access 2000 資料庫

     編輯:VC 教學

背景

Access 資料庫長期使用後會產生碎片、膨脹體積。定期壓縮可重組儲存空間、修復輕微損壞、提升效能。利用 ADO 的 JRO.JetEngine 物件可在 C++Builder 中以數行代碼完成壓縮,並支援密碼保護的資料庫。

核心代碼

#include "utilcls.h"  // Variant 相關輔助

void CompactDatabase(AnsiString SrcFile, AnsiString SrcPwd,
                     AnsiString DstFile, AnsiString DstPwd)
{
    // 建立連接字串
    AnsiString ConnSrc = "Provider=Microsoft.Jet.OLEDB.4.0;"
                         "Data Source=" + SrcFile + ";"
                         "Jet OLEDB:Database Password=" + SrcPwd + ";";
    AnsiString ConnDst = "Provider=Microsoft.Jet.OLEDB.4.0;"
                         "Data Source=" + DstFile + ";"
                         "Jet OLEDB:Database Password=" + DstPwd + ";";

    // 建立 JetEngine 物件並呼叫 CompactDatabase 方法
    Variant JetEngine = Variant::CreateObject("JRO.JetEngine");
    JetEngine.OleProcedure("CompactDatabase", ConnSrc, ConnDst);
    JetEngine.Clear();  // 釋放 COM 物件
}

// 使用範例
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString Dir = ExtractFilePath(Application->ExeName);
    AnsiString Src = Dir + "yhecdagl1.mdb";
    AnsiString Dst = Dir + "yhecdagl2.mdb";

    if (FileExists(Dst)) DeleteFile(Dst);  // 目標檔必須不存在

    CompactDatabase(Src, "yhecdagl", Dst, "yhecdagl2");
    ShowMessage("壓縮完成!");
}

關鍵點說明

  • JRO.JetEngine:需安裝 MDAC 2.1+(含 Jet 4.0 OLE DB Provider 與 JRO 元件)。
  • 目標檔不可存在:CompactDatabase 會建立新檔,若已存在會失敗。
  • 密碼處理:連接字串中 Jet OLEDB:Database Password 參數支援來源與目標不同密碼,實現壓縮時修改密碼。
  • 錯誤處理:生產代碼應包裝 try/__except 或檢查 HRESULT,捕捉檔案鎖定、密碼錯誤、磁碟空間不足等異常。
  • 路徑:建議使用完整絕對路徑,避免相對路徑在不同工作目錄下失效。

適用版本

Access 2000 (Jet 4.0) 及更新版本(.mdb 格式)。對於 .accdb (Access 2007+),需改用 ACE OLEDB Provider 並參考 Microsoft.ACE.OLEDB.12.0,但壓縮邏輯類似。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved