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

标签 database ms-access vbscript compression

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

我的代码是:

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 已成功创建,因为我在那行没有收到任何错误。有什么问题吗?

最佳答案

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 内容来简化它。

编辑:修改为检查锁定文件;如果找到什么也不做。

关于database - 为什么我不能使用 VBscript 在 DAO.DBEngine.36 中使用 "CompactDatabase"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133738/

相关文章:

database - 如何在 vbscript 中将记录集放入二维数组中?

sql - 嵌套查询: best practices

ms-access - 如何搜索 VBA 代码文件

ms-access - MS Access 全局和设置最佳实践

vbscript - 如何使用文件系统作为信号量

VBScript:查找数组中非空元素的数量

database - Django - 将模型代码与数据库进行比较

ruby-on-rails - 将 Postgres Schema 与 Ruby on Rails 结合使用

c# - Entity Framework 数据库首先是多对多

c# - 在 Windows 中的两个不同应用程序之间共享 sqlite 数据库