运行 来自 VBA 的 VBS 脚本 - 无法识别的数据库格式
Running VBS script from VBA - Unrecognized DB Format
我正在创建 vbs 脚本,它将用作使用 MS Access 作为前端的工具的自动更新程序。 VBS 脚本将使用来自 MS Access (1) 的 VBA 代码启动。该脚本的一部分是通过创建与工具前端文件 (Test.accdb) 的 ADODB 连接并从 "tblLocalParameters" table (2 ).
问题是,当我双击脚本时,使用 ADODB 的函数可以正常工作,但是当我尝试使用 MS Access 运行 它 VBA 时,它会抛出错误:
"Unrecognized database format"
我不确定是否需要有关整个自动更新程序脚本的更多信息,但我的计划是:检查 SQL db 是否工具是最新的。如果没有 - 启动更新程序脚本。脚本将使用 shell 命令关闭 MS Access,然后复制新文件并再次 运行 MS Access。
我尝试 运行 来自 excel 和其他 MS Access 文件的相同脚本,它导致了同样的错误。
如能帮助我消除 "Unrecognized database format" 错误,我将不胜感激。
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
我找到了问题的根源。我决定放弃 VBS 并创建 C# 控制台应用程序。在测试期间,我发现连接字符串 (provider = "Microsoft.ACE.OLEDB.12.0") 仅在我将平台目标设置为 x64 时才有效。
我的 Windows 是 64 位的,但 Office 是 32 位的。在资源管理器中双击以 x64 启动脚本,但 MS Access vba shell 以 x86 启动它。
我找到了一些代码,将其添加到脚本中 - 它解决了问题。
If InStr(LCase(WScript.FullName),"syswow64") Then
CreateObject("WScript.Shell").Run """%systemroot%\sysnative\wscript.exe"" """ & WScript.ScriptFullName & """"
WScript.Quit
End If
如果脚本在 64 位 windows 上以 32 位模式运行,它会以 64 位模式重新运行。
我正在创建 vbs 脚本,它将用作使用 MS Access 作为前端的工具的自动更新程序。 VBS 脚本将使用来自 MS Access (1) 的 VBA 代码启动。该脚本的一部分是通过创建与工具前端文件 (Test.accdb) 的 ADODB 连接并从 "tblLocalParameters" table (2 ).
问题是,当我双击脚本时,使用 ADODB 的函数可以正常工作,但是当我尝试使用 MS Access 运行 它 VBA 时,它会抛出错误: "Unrecognized database format"
我不确定是否需要有关整个自动更新程序脚本的更多信息,但我的计划是:检查 SQL db 是否工具是最新的。如果没有 - 启动更新程序脚本。脚本将使用 shell 命令关闭 MS Access,然后复制新文件并再次 运行 MS Access。
我尝试 运行 来自 excel 和其他 MS Access 文件的相同脚本,它导致了同样的错误。
如能帮助我消除 "Unrecognized database format" 错误,我将不胜感激。
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
我找到了问题的根源。我决定放弃 VBS 并创建 C# 控制台应用程序。在测试期间,我发现连接字符串 (provider = "Microsoft.ACE.OLEDB.12.0") 仅在我将平台目标设置为 x64 时才有效。
我的 Windows 是 64 位的,但 Office 是 32 位的。在资源管理器中双击以 x64 启动脚本,但 MS Access vba shell 以 x86 启动它。
我找到了一些代码,将其添加到脚本中 - 它解决了问题。
If InStr(LCase(WScript.FullName),"syswow64") Then
CreateObject("WScript.Shell").Run """%systemroot%\sysnative\wscript.exe"" """ & WScript.ScriptFullName & """"
WScript.Quit
End If
如果脚本在 64 位 windows 上以 32 位模式运行,它会以 64 位模式重新运行。