2010-06-28 194 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

相关问题