利用 JRO (Microsoft Jet and Replication Object 壓縮資料庫 壓縮資料庫會重新安排資料庫檔案儲存在磁碟中的位置,以更有效率地使 用磁碟檔案空間,另外,你也可以用它來複製資料庫。 以下範例展示了壓縮 c:\data\northwind.mdb 資料庫,壓縮後的資料庫 會建立於 c:\data\newnorth.mdb。在使用下列範例前,你必須 import JRO type library:開啟一個新的專案,點選 Project | Import Type Library, 選擇 Micro$oft Jet and Replication Objects 2.1 Library (Version 2.1),然後按 Create 便可以產生 JRO_TLB.pas。 Uses JRO_TLB; const Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; SrcMDB = 'c:\data\northwind.mdb'; DstMDB = 'd:\data\newnorth.mdb'; procedure TForm1.Button1Click(Sender: TObject); var JetEng : JetEngine; Src : WideString; Dest : WideString; begin JetEng := CoJetEngine.Create; Src := Provider + 'Data Source=' + SrcMDB; Dest := Provider + 'Data Source=' + DstMDB; try If FileExists(DstMDB) Then DeleteFile(DstMDB); JetEng.CompactDatabase(Src, Dest); finally JetEng := Nil; end; end; 備註: 當一個資料庫被壓縮之後時,標記成已刪除的記錄會真正被除去,而自動 遞增欄位則會被重新指定為下一個連續的序號,也就是目前的最大值+1。 比如說,資料表有十筆記錄,其自動編號欄位均為連續,如果刪除掉最後 三筆,則下次新增一筆記錄時編號為11,如果先把資料庫壓縮,那麼新增 時編號就是 8。 由於資料庫統計被更新了,在查詢最佳化中使用的資料表統計也會被更新 ,所有的查詢都會被標上旗號,所以這些查詢會在下次被執行時重新編譯 過。 相關資源: http://msdn.microsoft.com/library/psdk/msjro/jros9h4j.htm