我正在尝试制作一个小型 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/