为什么我不能使用VBscript在DAO.DBEngine.36中使用"CompactDatabase"?

Mik*_*ike 5 database compression vbscript ms-access

我正在尝试制作一个压缩MS Access 2007数据库文件的小型VBScript.

我的代码是:

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

当我使用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对象已成功创建,因为我没有在该行上收到任何错误.有什么不对?

Han*_*sUp 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
Run Code Online (Sandbox Code Playgroud)

注意:我决定在压缩之前备份我的数据库.最后,我删除原始(未压缩)数据库并将压缩的数据库重命名为原始名称.如果您对此不感兴趣,可以通过删除objFSO来简化这一过程.

编辑:修改以检查锁定文件; 如果发现什么都不做