自动更新程序遇到问题

时间:2019-02-08 15:37:39

标签: ms-access access-vba

我是访问编码方面的新手,我遇到了一种简单的远程更新数据库的方法。附件是数据库的说明和简化版本。谁能告诉我我在做什么错?在此先感谢!

  

这是一个很棒的模块,效果很好,但是我想让   人们知道您可以在不使用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

1 个答案:

答案 0 :(得分:0)

发布的代码与我使用的代码相似。我也使用脚本方法,但是我喜欢将其全部包含在Access中,而不必在每台用户计算机上安装脚本文件。但是,我没有使用宏,只有VBA。 VBA位于默认情况下打开的“登录”表单的后面。表单绑定到Updates表,因此DLookup()不用于版本检查。 gstrBasePath是在常规模块中声明的全局常量。这使用Windows Shell,因此有必要设置对Microsoft Shell控件和自动化库的引用。不幸的是,IT部门对计算机进行了附加限制,使其完全无法以编程方式复制文件(最初仅限于C:\根目录),这对我不再起作用。

%