【发布时间】:2019-10-11 12:52:58
【问题描述】:
我正在创建 vbs 脚本,它将作为使用 MS Access 作为前端的工具的自动更新程序。 VBS 脚本将使用 MS Access (1) 中的 VBA 代码启动。该脚本的一部分是通过创建与工具前端文件 (Test.accdb) 的 ADODB 连接并从“tblLocalParameters”表 (2) 中读取“CurrentVersion”值来检测工具当前版本的函数。
问题是,当我双击脚本时,使用 ADODB 的函数可以正常工作,但是当我尝试使用 MS Access VBA 运行它时,它会抛出错误: "无法识别的数据库格式"
我不确定是否需要有关整个自动更新程序脚本的更多信息,但我的计划是:检查 SQL db 是否工具是最新的。如果不是 - 启动更新程序脚本。脚本将使用 shell 命令关闭 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
【问题讨论】:
-
首先使用更新的提供程序(我认为 Access 2016 附带
ACE.OLEDB.16.0)。在共享模式下使用数据库通常很困难。但是,我建议将此类参数存储在数据库属性表中,这样您就可以正确存储正确的类型,而无需为每种类型都创建一个单独的表。 -
你能解释一下为什么你不能在你的 VBA 代码中运行 VBS 代码吗?另外,您能解释一下错误发生在 VBS 中的哪个位置(哪一行)?
-
问题行:cn.Open。为什么不在您的 VBA 代码中运行 VBS 代码:每个用户在文档文件夹下都有自己的 MS Access 工具文件,并在桌面上拥有它的快捷方式。我想控制人们正在使用的版本。根据我的经验,要求好心的用户删除旧版本的工具并复制新的工具是个坏主意。如果需要更新,用户将弹出并带有标签“立即更新”的按钮。这就是我需要一个 VBS 脚本的地方 - 想法是从 MS Access 运行这个脚本,脚本将关闭它,替换文件并再次打开。我无法替换正在使用的文件。
-
我只是不明白为什么当我双击运行 VBS 脚本时它工作正常,但当我在 Excel/Access vba 编辑器中使用 shell 命令打开它时却不行。
-
您正试图从该数据库文件中访问该数据库文件,有什么要理解的?这就是为什么只有 VBScript 可以工作的原因,因为您还没有在 MSAccess 中打开数据库。
标签: vba vbscript adodb ms-access-2016