使用的项目:
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年没有?
答案 0 :(得分:0)
也许我没有看到所有的代码或遗漏了一些东西但是......通常你需要将DatabaseName声明为所有子程序都可用的公共变量。 或..将值传递回调用语句。
这样打电话:
databasename = GetApplicationInformation()
该功能如下所示:
Public Function GetApplicationInformation() As String
...
GetApplicationInformation = AnswerSet("MDE_Name") ' the database name
但当然这并不能解释为什么它在Access 2007中有效。也许你的一些更多细节会有所帮助。
答案 1 :(得分:0)
这是一个相当复杂的系统。
Command()
函数返回一个字符串,该字符串使用/ cmd开关附加到Access命令行。
您必须启动Access,例如像这样
"MSACCESS.EXE C:\mypath\Database1.accdb /cmd SomeString"
然后如果Database1.accdb调用Command()
,则返回“SomeString”。
但是如果我理解正确的话,上面的代码会用
启动较低的代码Shell "MsAccess.exe " & "P:\AccessSystems\VersionControl\VersionControl2013.accde"
没有/ cmd开关,因此Command()
不会返回任何内容
它是否在转向Access 2013时迷失了?
修改强>
正如我上面所写,ApplicationName = Command$()
无法在较低的代码中工作,因为此处没有传递/cmd
字符串:
Shell "MsAccess.exe " & "P:\AccessSystems\VersionControl\VersionControl2013.accde"
在这里使用:
WHERE VersionControl2013.System_Name = " & "'" & ApplicationName & "'"
所以你需要传递正确的VersionControl2013.System_Name
,如下所示:
Shell "MsAccess.exe " & "P:\AccessSystems\VersionControl\VersionControl2013.accde /cmd mySystemName"
或者System_Name
只是数据库(UserVersion)的名称,如下所示:
Shell "MsAccess.exe " & "P:\AccessSystems\VersionControl\VersionControl2013.accde /cmd " & Dir(CurrentDb.Name)
我使用Dir()
从完整路径中提取文件名。