Запуск сценария VBS из VBA - нераспознанный формат БД - PullRequest
0 голосов
/ 11 октября 2019

Я создаю скрипт vbs, который будет работать как автообновление для инструмента, который использует MS Access в качестве внешнего интерфейса. Сценарий VBS будет запущен с кодом VBA из MS Access (1). Частью этого скрипта является функция, которая обнаруживает текущую версию инструмента, создавая соединение ADODB с файлом интерфейса пользователя (Test.accdb) и считывая значение «CurrentVersion» из таблицы «tblLocalParameters» (2).

Проблема в том, что когда я дважды щелкаю по скрипту, функция с ADODB работает правильно, но когда я пытаюсь запустить его с MS Access VBA, она выдает ошибку: «Нераспознанный формат базы данных»

IЯ не уверен, что необходима дополнительная информация обо всем сценарии автоматического обновления, но я планировал: проверить с помощью базы данных SQL, обновлен ли инструмент. Если нет - запустите скрипт обновления. Скрипт закроет MS Access с помощью команды оболочки, затем скопирует новый файл и снова запустит MS Access.

Я попытался запустить тот же скрипт из Excel и из другого файла MS Access, он вызвал ту же ошибку.

Буду признателен за помощь в устранении ошибки «Неопознанный формат базы данных».

MS ACCESS CODE:
(1) 
Dim Test()
    Shell "wscript ""C:\Test_Folder\TEST.vbs""", vbNormalFocus
End Sub
(2)
VBS SCRIPT CODE
Option Explicit

Dim strFile

strFile = "C:\Test_Folder\TEST.accdb"

WScript.Echo  FileReadAccessDB(strFile,"tblLocalParameters","ParameterValue","ParameterName","'VersionCurrent'")

'-------------------------------------------------------------
Function FileReadAccessDB(DbPath, tblName,fldName,IdCol,IdVal)
    Dim cn, rs
    Dim qSQL
    Dim errNo

    Set cn = CreateObject("ADODB.connection") 

    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DbPath & ";Persist Security Info=False;"
    cn.Open

    Set rs = CreateObject("ADODB.recordset")
    qSQL = "SELECT " & fldName & " FROM " & tblName & " WHERE " & IdCol &  " = " & IdVal
    rs.open qSQL, cn

    FileReadAccessDB =  rs.fields(fldName).value

    rs.close
    cn.close

End Function

1 Ответ

0 голосов
/ 15 октября 2019

Я нашел источник проблемы. Я решил отказаться от VBS и создать консольное приложение на C #. Во время тестирования я обнаружил, что строка подключения (provider = "Microsoft.ACE.OLEDB.12.0") работает только в том случае, если для цели платформы установлено значение x64.

У меня Windows 64-битная, а Office 32-битная. Двойной щелчок в проводнике запустил скрипт как x64, но оболочка MS Access vba запустила его как x86.

Я нашел некоторый код, добавил его в скрипт - это решило проблему.

If InStr(LCase(WScript.FullName),"syswow64") Then
CreateObject("WScript.Shell").Run """%systemroot%\sysnative\wscript.exe"" """ & WScript.ScriptFullName & """"
  WScript.Quit
End If

Если скрипт работает в 32-битном режиме в 64-битных окнах, он перезапускается в 64-битном режиме.

Кредит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...