2013-02-25 4 views
2

Я пытаюсь обновить MDB, используя скрипт VBS. На одном компьютере он работает нормально (WinXP и Office 2003), а с другой (Win7 64-бит VM с Office 2010) Я получаю сообщение об ошибке «Компонент ActiveX не может создать объект:« DAO.DBEngine.36 «». Код:Доступ к MDB через VBS

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, в то время как Wscript в system32 является 64-битная версия. Немного странно ...

+2

Вы запустили свой скрипт с помощью [32-битного интерпретатора] (http://stackoverflow.com/a/2429502/1630171)? –

+0

Прежде чем думать о том, как обеспечить что-то, я предлагаю проверить, действительно ли он решает проблему. –

+0

@AnsgarWiechers: +1 большое спасибо, я не видел ссылку в вашем первом комментарии! Вы должны поместить свой комментарий в ответ, чтобы закрыть вопрос. –

ответ

1

Вам может понадобиться запустить скрипт с 32-разрядной версии интерпретатора скриптов:

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

Взятые из this answer на подобный вопрос.

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

Это похоже на то, что я потерял аргументы: у меня есть строка, проверяющая его с помощью 'if WScript.Arguments.Count = 0 then ...', который теперь действует, как и нет arg. –

+0

Спасибо за ответ! –

+0

@iDevlop - Это основная идея иметь автономный скрипт. И, конечно, вы можете изменить мою функцию для использования аргументов и добавить их в команду 'oShell.Run'. –

Смежные вопросы