2

VBSスクリプトを使用してMDBを更新しようとしています。一方のマシン(WinXPおよびOffice 2003)では正常に動作しますが、もう一方のマシン(Win764ビットVMとOffice2010)では、「ActiveXコンポーネントはオブジェクトを作成できません:'DAO.DBEngine.36'」というエラーが発生します。コード:

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

で試してみましたがDAO.DBEngine、違いはありませんでしたDAO.DBEngine.120。 どこが問題なのかわかりません。どんな手掛かり ?.140


更新:次のようなスクリプトをcallinkすることで、機能させることができることがわかりました。

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

どうやら32ビットのWscriptを呼び出すには、syswow64から呼び出す必要がありますが、system32のWscriptは64ビットバージョンです。少し奇妙な...

4

2 に答える 2

4

64ビットではOS.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

この回答から同様の質問への回答。

于 2013-02-26T15:27:13.337 に答える