项目:
- 访问2013数据库源是.ACCDB
- 访问2013数据库.accde(如 “源” 引用)的来源。 (引用为“CURRENTVERSION”)
- 用户有CURRENTVERSION对它们的C副本:\ AccessSystems文件夹(被引用为“UserVersion”)链接到“源”
- SQL数据库表命名
VersionControl2013
。
表包含:System_Name
,Version_Number
,MDE_Path_Name
和MDE_Name
。
流程:
开发使得源的变化
开发者更新类别下一个版本号。类别位于数据库属性中。
开发人员创建CurrentVersion并将其保存到P:\ drive(其中保存了所有CurrentVersions)。
用户打开UserVersion并运行代码以检查它是否与CurrentVersion匹配。
用户选择更新和代码运行,关闭UserVersion及复印件CURRENTVERSION用户的C:\ AccessSystems文件夹中。
现在...用户是最新的正确版本。
UserVersion由用户打开,在打开时它会检查,看看是否匹配版本使用下面的代码:
Public Sub CheckVersionNumber()
Dim SQLConn As New ADODB.Connection
Dim AnswerSet As New ADODB.Recordset
Set dbs = CurrentDb
Set cnt = dbs.Containers!Databases
Set doc = cnt.documents!SummaryInfo
doc.Properties.Refresh
Set ThisVersion = doc.Properties("Category")
Set SystemName = doc.Properties("Title")
Set SQLConn = New ADODB.Connection
SQLConn.Provider = "sqloledb"
SQLConn.Open "Data Source=scgcserver1;Initial Catalog=SCGCDatawarehouse "
QueryString = "SELECT VersionControl2013.* FROM VersionControl2013 WHERE (((VersionControl2013.System_Name)=" & "'" & SystemName & "'" & "));"
AnswerSet.Open QueryString, SQLConn, , adCmdText
If AnswerSet.EOF = False Then
If RTrim(AnswerSet("Version_Number")) = ThisVersion Then
Else
MsgBox ("Version Number does not match")
ServDir = "p:\accesssytems"
Shell "MsAccess.exe " & "P:\AccessSystems\VersionControl\VersionControl2013.accde"
Application.Quit
End If
End If
AnswerSet.Close
With SQLConn
.Close
End With
End Sub
注意:下面的代码在Access 2007中它不会在Access 2013的工作。
当CURRENTVERSION被调用并打开它运行下面的代码:
Public Function LoadVersion()
DialogMessage = "You have a previous version of the Application, Do you want to UPDATE your version?"
DialogStyle = vbYesNo + vbDefaultButton1
DialogTitle = "Update Application"
DialogResponse = MsgBox(DialogMessage, DialogStyle, DialogTitle)
If DialogResponse = vbYes Then
ApplicationName = Command$()
Call GetApplicationInformation
DoCmd.Hourglass True
ToDirectory = "C:\AccessSystems\" & RTrim(DatabaseName)
FromDirectory = RTrim(MDEPathName) & RTrim(DatabaseName)
FileCopy "p:\AccessSystems\compiles\Access2013Compiles\" & DatabaseName, "c:\AccessSystems\" & DatabaseName
MsgBox ("Your Client Copy has been updated - Thank You " & " " & ApplicationName & " " & DatabaseName)
Shell "MsAccess.exe " & "C:\AccessSystems\" & RTrim(DatabaseName)
Application.Quit
End If
End Function
Public Sub GetApplicationInformation()
Dim SQLConn As New ADODB.Connection
Dim AnswerSet As New ADODB.Recordset
Set SQLConn = New ADODB.Connection
SQLConn.Provider = "sqloledb"
SQLConn.Open "Data Source=scgcserver1;Initial Catalog=SCGCDatawarehouse "
QueryString = "SELECT VersionControl2013.* FROM VersionControl2013 WHERE (((VersionControl2013.System_Name)=" & "'" & ApplicationName & "'" & "));"
AnswerSet.Open QueryString, SQLConn, , adCmdText
If AnswerSet.EOF = False Then
DatabaseName = AnswerSet("MDE_Name")
MDEPathName = AnswerSet("MDE_Path_Name")
End If
AnswerSet.Close
With SQLConn
.Close
End With
End Sub
我得到一个运行时错误
52:错误的文件名或编号。
调试使它行,DatabaseName
是“”。
FileCopy "p:\AccessSystems\compiles\Access2013Compiles\" & DatabaseName, "c:\AccessSystems\" & DatabaseName
我觉得行:ApplicationName = Command$()
有事情做它,因为ApplicationName
为空也。它应该引入应用程序的名称。
为什么它在2007年的工作,而不是在2013年?
有意思的是,'VersionControl2013'表是一个SQL Server数据库。请注意SQL是一种编程语言,包括Oracle,SQL Server,Postgre,MySQL,DB2,SQLite,甚至包括Jet/ACE SQL引擎的MS Access在内的许多RDMS都可以使用! – Parfait
另外,你为什么要在链接表上运行一个ADO连接,即'VersionControl2013'?如果在当前数据库中可用作当前文件中的链接表,请使用MS Access'[DLookUp()](http://www.techonthenet.com/access/functions/domain/dlookup.php)。建立链接表时,您已经连接了ODBC。不需要再做一次。 – Parfait