Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

access2007数据库如何根据版本号自动更新新文件

李振兴  发表于:2017-01-16 17:43:33  
复制

'作者:张志(竹笛)
'单位:艾盟威软件有限公司
'技术站点:http://www.accessoft.com
'公司站点:http://www.umvsoft.com
'说明:为祝贺本人获得2007年度微软最有价值专家(MVP)特分享本程序,您可以免费使用本程序,但请保留作者信息,如果您有更好的建议,请与我联系
'修订历史:2007-7-10

(Q)如何在局域网上实现自动升级?

(A)
1.建一个启动程序log_on.mdb

2.判断本地主程序与服务器端主程序的版本是否一致
  采用GetVersion函数来获得版本号
Public Function GetVersion(FileName As String, strPWS As String) As String
    Dim rst As ADODB.Recordset
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & FileName & ";jet oledb:database password='" & strPWS & "'"
    strSQL = "select * from tblversion"
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open strSQL, strConn
    rst.MoveFirst
    GetVersion = rst!Version
    rst.Close
    Set rst = Nothing
End Function 

3.将服务器端的主程序替换本地主程序
    Dim SourceFile As String
    Dim DestinationFile As String
    Dim localVision As String
    Dim serverVision As String
    ' 指定服务器上的文件名。
    ' SourceFile = "\\172.16.172.6\server\main.mdb"
    SourceFile = CurrentProject.Path + "\server\main.mdb"
    ' 指定本地文件名。
    DestinationFile = CurrentProject.Path + "\main.mdb"
    If Dir(SourceFile) = "" Then
        MsgBox SourceFile & vbCrLf & "网路不通或文件不存在!", vbCritical, "提示"
        Exit Sub
    End If
    '获得本地主程序的版本号
    localVision = GetVersion(DestinationFile, "")
    '获得服务器端升级文件的版本号
    serverVision = GetVersion(SourceFile, "")
    If localVision = serverVision Then
        '运行主程序
        OpenDB
    Else
        MsgBox "版本不同,现在开始升级!", vbInformation, "提示"
        FileCopy SourceFile, DestinationFile
        MsgBox "版本升级结束!", vbInformation, "提示"
        '运行主程序
        OpenDB
    End If

4.替换结束后运行主程序
Public Sub OpenDB()
    Dim strDB As String
    strDB = CurrentProject.Path & "\main.mdb"
    Set appAccess = CreateObject("Access.Application")
    Set db = appAccess.DBEngine.OpenDatabase(strDB, False, False, ";PWD=")
    appAccess.OpenCurrentDatabase strDB
    If Val(SysCmd(acSysCmdAccessVer)) = 9 Then
        appAccess.Visible = True
    End If
    DoCmd.Quit
End Sub

///////////////////////////////////

上面代码运行到最后 DoCmd.Quit的时候,没能打开更新的新文件,而是两个数据库都关闭了

另外如果这个功能不好弄,旧平台的自动更新是不是有什么快速的方法可以解决,麻烦指定,谢谢

 

Top
MDZZ 发表于:2017-01-17 08:20:33
 测试这    appAccess.OpenCurrentDatabase strDB      If Val(SysCmd(acSysCmdAccessVer)) = 9 Then   

李振兴 发表于:2017-01-17 18:11:49
Val(SysCmd(acSysCmdAccessVer))实际是=7,请问是什么原因呢,难道是示例的版本问题吗,我用的是2007版的

总记录:2篇  页次:1/1 9 1 :