'*************說明**********
'*壓縮之後會產生新的Database所以要給它新的檔名,也就是副程式的第二個參數
'*動作做完之後會將舊的刪除,然後將新的檔名改回
'*要注意伺服器的資料夾是不是有刪除或修改資料庫的權限
'*參考資料 : http://support.microsoft.com/default.aspx?scid=kb;zh-tw;230501
'*************說明**********

CompactDB "C:\AcAllDB\jhotel.mdb" , "C:\AcAllDB\Newjhotel.mdb" '=====呼叫副程式
Sub CompactDB(strOldDB,strNewDB)
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists(strOldDB) then
Set Engine = Server.CreateObject("JRO.JetEngine")
strPvdOLD = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&strOldDB
strPvdNew = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&strNewDB
Engine.CompactDatabase strPvdOLD , strPvdNew '動作**開始壓縮資料庫
set Engine = nothing '動作**關閉物件
fso.DeleteFile strOldDB '刪除舊的資料庫
fso.MoveFile strNewDB, strOldDB '將壓縮好的資料庫改回來
response.write "資料庫壓縮完畢!"
else
response.write "找不到指定的資料庫!"
end if
set FSO = nothing
end sub
 

 

 

在web的系統中,如果是使用Access當資料庫的話,往往都會面臨一個問題,
就是資料刪除後,資料庫的檔案大小還是一樣大,
它並沒有因為裡面的資料被刪了而減少...

為了不讓我們的Access肆無忌憚的長大,
所以我們必須修復壓縮它一下!

在Access的[工具/資料庫公用程式]中,
有個[修復及壓縮資料庫],
但如果我們的資料庫放在那遙遠的主機上的話,
哪他下載下來"修理"完後再丟上去是有點浪費時間的...
(尤其遇到哪種主機代管商的網路不穩時...)

以下是一個壓縮資料庫的函數,
使用前提:主機須有安裝MDAC 2.1以上,可以使用FileSystemObject

Sub CompactDB(strDBFileName)
  Set fso = CreateObject("Scripting.FileSystemObject")
  dim strOldDB 
  strOldDB = server.MapPath(strDBFileName)
  dim strNewDB 
  strNewDB = server.MapPath("New" & strDBFileName)
  if fso.FileExists(strOldDB) then 
    '壓縮資料庫
    Set Engine = Server.CreateObject("JRO.JetEngine")
    strPvd = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    Engine.CompactDatabase strPvd & strOldDB , strPvd & strNewDB
    set Engine = nothing 
    '刪除舊的資料庫
    fso.DeleteFile strOldDB 
    ' 將壓縮好的資料庫改回來
    fso.MoveFile strNewDB, strOldDB 
    response.write "資料庫壓縮完畢!"
  else
    response.write "找不到指定的資料庫!"
  end if
  set FSO = nothing
end sub

呼叫方式

call CompactDB("yourdb.mdb")

如果你的資料庫是access 97的話,
就修改一下Engine.CompactDatabase 那段 ,將

Engine.CompactDatabase strPvd & strOldDB , strPvd & strNewDB

改成

Engine.CompactDatabase strPvd & strOldDB , strPvd & strNewDB & ";Jet OLEDB:Engine Type=4"


 



相關資料

 

 

Online compacting of Access databases
http://authors.aspalliance.com/mbrink1111/compact.asp

Compact and Repair
http://www.asperium.com/Articles/ShowArt.asp?Cat=ASP&Article=30

HOWTO:經由 ADO 壓縮 Microsoft Access 資料庫
http://support.microsoft.com/default.aspx?scid=kb;zh-tw;230501