項目:
- 訪問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