2010-06-28 169 views
5

我想製作一個壓縮MS Access 2007數據庫文件的小VBScript。爲什麼我不能使用VBscript在DAO.DBEngine.36中使用「CompactDatabase」?

我的代碼是:

Set acc2007 = CreateObject("DAO.DBEngine.36") 
acc2007.CompactDatabase "C:\test.accdb", "C:\test2.accdb", Nothing, Nothing, ";pwd=test" 
Set acc2007 = Nothing

當我運行從32位CMD.EXE的三行的 「cscript test.vbs」 我得到這個錯誤:

C:\ test.vbs(10,1)DAO.DbEngine:無法識別的數據庫格式'C:\ test.accdb'。

該數據庫是用MS Access 2007創建的,當我通過雙擊圖標打開它時,我輸入密碼「test」,然後我正常打開。它在頂部顯示「Access 2007」,因此它具有正確的格式。

這裏的功能我想使用的文檔:http://msdn.microsoft.com/en-us/library/bb220986.aspx

對象DAO.DBEngine.36創建成功,因爲我沒有得到該行的任何錯誤。什麼可能是錯誤的?

+1

這就是爲什麼您應該首先檢查.ldb文件(鎖定文件)的代碼,並且只有在找不到時才繼續。 – Fionnuala 2010-06-28 18:28:00

+0

我可以過得很開心。 =)乾杯。 – Mike 2010-06-30 12:04:06

回答

6

DAO 3.6不支持新的ACCDB數據庫格式。改用DAO.DBEngine.120。

這是一個適用於我的系統的例子。

Dim objFSO 
Dim objEngine 
Dim strLckFile 
Dim strSrcName 
Dim strDstName 
Dim strPassword 

strLckFile = "C:\Access\webforums\foo.laccdb" 
strSrcName = "C:\Access\webforums\foo.accdb" 
strDstName = "C:\Access\webforums\compacted.accdb" 
strBackup = "C:\Access\webforums\foobackup.accdb" 
strPassword = "foo" 

Set objEngine = CreateObject("DAO.DBEngine.120") 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
If Not (objFSO.FileExists(strLckFile)) Then 
    If (objFSO.FileExists(strBackup)) Then 
     objFSO.DeleteFile strBackup 
    End If 
    If (objFSO.FileExists(strDstName)) Then 
     objFSO.DeleteFile strDstName 
    End If 
    objFSO.CopyFile strSrcName, strBackup 

    ''dbVersion120 = 128 
    objEngine.CompactDatabase strSrcName, strDstName, , 128, ";pwd=" & strPassword 

    objFSO.DeleteFile strSrcName 
    objFSO.MoveFile strDstName, strSrcName 
End If 'LckFile 

注意:我決定之前緊湊,使我的數據庫的備份。最後,我刪除原始(未壓縮的)數據庫,並將壓縮的數據庫重命名爲原始名稱。如果你對此不感興趣,你可以通過刪除objFSO來簡化它。

編輯:修改爲檢查鎖定文件;如果發現什麼都不做。

+0

我可以吻你,雖然我會握住你的手。 :)非常感謝你,這個作品! Access 2007數據庫已成功壓縮,並且不會將格式更改爲較早的Access數據庫(如同其他方法一樣),並且還會修復具有不一致狀態的數據庫!對於任何讀取此內容但無法使其工作的人:如果您使用的是64位Windows,請記住通過32位cmd(可在SysWOW64中找到)運行該腳本。再次感謝HansUp,這不會更有幫助。 – Mike 2010-06-30 12:01:47

3

上面的命令不會爲訪問2007年和2010年

工作,而所有版本的Windows要追溯到2000年,也許甚至是Windows 98,船舶用噴氣發動機的一個副本,進入2007年及以後,如果您使用NEW格式(accdb),那麼您需要使用稱爲ACE的新版Jet引擎。請注意,此數據引擎在Windows上未默認安裝,因此您必須從Microsoft下載該數據引擎。

當然假設您已經安裝了Access 2007,那麼您將擁有新的Jet引擎(ACE),而且您無需下載並安裝上述軟件。

你需要新的對象名爲DAO.DBEngine.120,因此您的代碼更改爲:

Set acc2007 = CreateObject("DAO.DBEngine.120") 

需要注意的是64位版本也已經推出。

+0

謝謝你。 – Mike 2010-06-30 12:03:35

相關問題