我是访问编码方面的新手,我遇到了一种简单的远程更新数据库的方法。附件是数据库的说明和简化版本。谁能告诉我我在做什么错?在此先感谢!
这是一个很棒的模块,效果很好,但是我想让 人们知道您可以在不使用VBA的情况下进行版本检查,并且 只需拥有运行VBA的Updater应用程序即可删除您的 本地复制并从服务器上下载新版本。
我在服务器的后端使用一个名为AppConstants的表,该表有两个 列:ConstantTitle和ConstantValue。其中一行具有 ConstantTitle设置为“ AppVersion”,ConstantValue设置为版本 数字。
然后我的主窗体上的可见性设置为False 称为VersionNo,我将此字段的值设置为=“ VersionNumber” (其中VersionNumber是实际的版本号,例如=“ 1.25”)。上 在主窗体的OnLoad事件中,我有一个宏,该宏在 IF命令:
if DLookUp("[ConstantValue]", "tblAdmin", "[ConstantTitle] ='AppVersion'")<>[Forms]![frmMain]![VersionNo] Then RunCode OpenUpdater() Quit Access End If The code for OpenUpdater: Code: Function OpenUpdater() 'This sets the name of the code to call later Dim accapp As Access.Application Set accapp = New Access.Application accapp.OpenCurrentDatabase ("C:\$Data\MyUpdater.accde") 'Starts up this file accapp.Visible = True End Function
它正在做什么:宏检查服务器上表中VersionNumber的值。当我更新应用程序副本时 在服务器上,我在此处设置新版本号并设置我的应用 将“版本号”字段复制到相同的编号。当你运行旧的 版本,则您的应用会看到版本号不匹配,然后 它执行宏的'Then'命令:它运行OpenUpdater代码 并自行关闭。
OpenUpdater代码只是启动MyUpdater.accde程序,该程序 默认情况下与应用程序一起安装在用户的PC上 本身。 OpenUpdater程序执行以下操作 码: DoCmd.ShowToolbar“ Ribbon”,acToolbarNo
'Copy the new version to the C drive Dim SourceFile, DestinationFile As String SourceFile = "Z:\Server\MyProgram.accde" 'Where to get the fresh copy DestinationFile = "C:\$Data\MyProgram.accde" 'Where to put it With CreateObject("Scripting.FileSystemObject") .copyfile SourceFile, DestinationFile, True 'This line does the acual copy and paste End With 'Reopen MyProgram Dim accapp As Access.Application Set accapp = New Access.Application accapp.OpenCurrentDatabase ("C:\$Data\MyProgram.accde") accapp.Visible = True End Function
此函数在MyUpdater的宏中调用,并且此宏中的RunCode之后的命令是QuitAccess, 会关闭更新程序。
所以我的主程序在打开主窗体时会检查版本 服务器上的号码。如果不同,则启动主程序 更新器,然后关闭自身。更新器复制新的 版本从服务器,并将其粘贴到C上的正确位置 驱动器,然后启动程序并自行关闭。
从最终用户的角度来看,该程序立即启动 退出,然后在大约一秒钟后再次开始,现在 更新。很棒。
我的问题是当我打开副本数据库时,更新未运行 但是当我进入myupdater数据库并手动运行 宏。这是宏
If DLookUp("[ConstantValue]","AppConstants","[ConstantTitle]='AppVersion'")<>[Forms]![NavMain]![VersionNo]
Then RunCode FunctionName OpenUpdater()
Quit Access
这是函数
Function OpenUpdater() 'This sets the name of the code to call later
Dim accapp As Access.Application
Set accapp = New Access.Application
accapp.OpenCurrentDatabase ("C:\Users\Tyrone\Desktop\MyUpdater.accde") 'Starts up this file
accapp.Visible = True
End Function
答案 0 :(得分:0)
发布的代码与我使用的代码相似。我也使用脚本方法,但是我喜欢将其全部包含在Access中,而不必在每台用户计算机上安装脚本文件。但是,我没有使用宏,只有VBA。 VBA位于默认情况下打开的“登录”表单的后面。表单绑定到Updates表,因此DLookup()不用于版本检查。 gstrBasePath是在常规模块中声明的全局常量。这使用Windows Shell,因此有必要设置对Microsoft Shell控件和自动化库的引用。不幸的是,IT部门对计算机进行了附加限制,使其完全无法以编程方式复制文件(最初仅限于C:\根目录),这对我不再起作用。
%