Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access开发平台

(VBA学习心得)平台自动升级的批处理文件方法.

时 间:2011-12-30 14:44:17
作 者:何必见戴   ID:13894  城市:厦门
摘 要:实现的步骤,和竹笛老大的获取版本号对比差异来进行升级的思路基本一致.主要是想实现通过版本号的变化实现软件所有文件的覆盖升级.但是由于单位服务器密码在外网登陆的时候没有办法自动获取,因此我选取了我们部门肯定可以访问得到的域共享文件夹作为升级文件的存放位置.看此文照搬代码的必要条件就一个:你在access开发平台上进行开发。如果不是,可借鉴其中的实现机制。
正 文:

首先,向竹笛老师请教了很多Access开发平台的问题,十分感谢!

好的一步一步来吧

1、我们知道access开发平台的版本号储存在sys_tblParameter表的Version字段里,那么这个字段是数据库后台表,如果更新的话是同步更新的,不存在对比差异问题。所以我们需要在前台建立一个新表来储存“旧的”版本号

2、我们在usysfrmOption_child窗体的txtVer更新后事件中写入以下代码.

'把版本号和更新时间保存到登陆框
        DoCmd.SetWarnings False
        DoCmd.RunSQL "Update 登陆窗体Version set LoginVersion='" & Me.txtVer & "',UpdateTime='" & Format(Now, "yyyy年m月d日h时m分") & "' where LoginName='当前版本号'"
        DoCmd.SetWarnings True

再在usysfrmlogin窗体中添加版本号和更新时间两个控件,便可在登录时看到更新后的版本号和更新时间了.如下图:


3.在你的当前软件路径下创建一个bat文件,(即文本文件后缀改成bat).命名为"自动升级.bat"写入以下代码.

@echo off
color 9F
title [自动升级程序]
:star
SET wait=ping -n 2 127.0.0.1 ^>^nul
for /l %%n in (10,-1,0) do (
   rem cls
   echo **************************************
   echo.
   echo          %%n秒后开始自动更新,请耐心等待...
   echo.
   echo **************************************
   %wait%
   cls
   )
   Xcopy "\\219.229.62.31\教务处\数据库文件\升级文件" "d:\教务处工作流程管理系统" /S /E /V /Y
 
)

 REGSVR32.EXE /s MSCOMCTL.OCX
 REGSVR32.EXE /s MSCOMCT2.OCX
 REGSVR32.EXE /s TEECHART7.ocx
start "" "D:\教务处工作流程管理系统\accdev.mde"


P.S:这是一个10秒倒计时自动复制所要更新文件夹和子目录所有文件,注册相关控件,并在更新后打开平台的代码.路径为我自己的固定路径,有需要的同志可根据自己的需要修改.

4.在usysfrmmain窗体的load事件中写入以下代码:


    '实现自动升级的版本号对比功能
    '=======================================================================
    '=======================================================================
    '=======================================================================
    Dim rst As Object
    Dim rst1 As Object
    Set rst = CurrentDb.OpenRecordset("Select * FROM 登陆窗体Version Where LoginName='当前版本号'", dbOpenDynaset, dbSeeChanges)
    rst.MoveFirst

    Set rst1 = CurrentDb.OpenRecordset("Select * FROM sys_tblParameter Where version='" & rst!LoginVersion & "'", 2, 512)
    If rst1.RecordCount = 0 Then

        MsgBox "您的软件不是最新版本,现在将更新您的软件", vbOKOnly, "重要提示"

        DoCmd.Close
        Shell CurrentProject.Path & "\点此升级.bat ", vbNormalFocus

        '把登陆窗体的标记值改为1,如果为0的话会启动自定义的退出对话框
        Forms!usysfrmlogin.Label15.Tag = 1
        DoCmd.Quit acQuitSaveAll

        '打开升级文件
        Exit Sub
    End If
    Set rst = Nothing
    Set rst1 = Nothing

    '=======================================================================
    '=======================================================================
    '=======================================================================

P.S: 这段代码依次实现了版本的对比,平台的关闭和批处理文件"自动升级.bat"的打开.

这里要注意的是,因为 Forms!usysfrmlogin.Label15.Tag 在初始化的时候为0,如果不改为其他值的话,平台的自定义退出窗口会弹出,所以把此值改掉即可.当然啦,升级后仍然会恢复成平台的自定义退出窗口.

5.经过这样一系列的设置,可以运行一下看看了,假定你现在的软件版本号和系统的版本号不一致,那么应该会出现如下画面

(1)、登录后:

(2)、按确定后:

结束后会显示复制了多少个文件等等

 

(3)、升级成功后

到此,告一段落~



Access快速开发平台QQ群 (群号:321554481)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助