2

我正在尝试使用 VBS 脚本更新 MDB。在一台机器上它工作正常(WinXP 和 Office 2003),但在另一台机器上(Win7 64 位 VM 和 Office 2010)我收到错误“ ActiveX 组件无法创建对象:'DAO.DBEngine.36' ”。编码:

Dim dbe
Set dbe = CreateObject("DAO.DBEngine.36")

我试过了,DAO.DBEngine没有区别。 我不明白问题出在哪里。有什么线索吗?DAO.DBEngine.120.140


更新:我发现我可以通过调用这样的脚本来使其工作:

c:\windows\syswow64\wscript MyScript.vbs Myargument

显然要调用 32 位 Wscript,您必须从 syswow64 调用它,而 system32 中的 Wscript 是 64 位版本。有点奇怪……

4

2 回答 2

4

在 64 位操作系统中,.vbs 以 64 位进程启动,因此您需要(在开始时)将脚本重新启动为 32 位进程。

'call it here
Force32bit

Dim dbe
Set dbe = CreateObject("DAO.DBEngine.36")

'just for testing:
WScript.Echo TypeName(dbe) 'DBEngine

'the rest of the code here...
Set dbe = Nothing

Sub Force32bit()
    Dim sWinDir, sSys64, sSys32, oShell
    Set oShell = CreateObject("WScript.Shell")
    sWinDir = oShell.ExpandEnvironmentStrings("%WinDir%")
    With CreateObject("Scripting.FileSystemObject")
        sSys64 = .BuildPath(sWinDir, "SysWOW64")
        If Not .FolderExists(sSys64) Then Exit Sub
        sSys32 = .BuildPath(sWinDir, "System32")
        If sSys32 = WScript.Path Then
            oShell.CurrentDirectory = sSys64
            oShell.Run "wscript.exe " & Chr(34) & _
            WScript.ScriptFullName & Chr(34), 1, False
            WScript.Quit
        End If
    End With
End Sub
于 2013-02-25T17:04:01.213 回答
1

您可能需要使用 32 位版本的脚本解释器运行脚本:

%SystemRoot%\SysWOW64\wscript.exe C:\path\to\script.vbs

取自this answer to a similar question。

于 2013-02-26T15:27:13.337 回答