2013-02-25 75 views
2

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

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

我试图与DAO.DBEngineDAO.DBEngine.120.140没什么区别。
我不明白问题在哪里。任何线索?


更新:我发现我可以使它通过callink这样的脚本工作:

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

显然到32位打电话的WScript您必须从SysWow64资料调用它,而WScript的system32中是64位版本。有点奇怪...

+2

您是否使用[32位解释器](http://stackoverflow.com/a/2429502/1630171)运行脚本? – 2013-02-25 17:02:07

+0

在考虑如何执行某些操作之前,我建议检查它是否真正解决了问题。 – 2013-02-26 09:38:10

+0

@AnsgarWiechers:+1非常感谢,我没有看到您的第一条评论中的链接!您应该将您的评论置于答案中,以便结束该问题。 – 2013-02-26 14:17:16

回答

1

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

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

this answer采取了类似的问题。

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 
+1

这似乎使我失去了参数:我有一行检查它'如果WScript.Arguments.Count = 0那么...'现在的行为像没有参数 – 2013-02-26 09:19:10

+0

谢谢你的答复! – 2013-02-26 14:18:20

+0

@iDevlop - 这是拥有独立脚本的基本思想。当然你可以修改我的函数来使用参数并将它们追加到'oShell.Run'命令中。 – 2013-02-26 17:17:06