我敢肯定你们中的许多人都使用后端和前端数据库。 后端保存所有表,前端保存所有代码。
如果您正在开发多用户系统,则可能会遇到与我相同的问题。 作为开发人员,我的前端和后端以及mdw安全文件位于C:驱动器上。
然后,最终用户需要后端,以及Z:驱动器(或H:或其他)上的安全文件。
每次发出新代码时,都要交换数十个表,因此我需要自动执行此操作,因此我编写了以下代码。
这在Access 2000和2003中有效,对于Access 2010不确定。
首先,我有一个简单的表单“ fdlgDropAll”,它具有两个选项。
它允许我删除所有附加表,也可以将附件从一个驱动器更改为另一个驱动器。
此表单有3个文本框显示
实时代码的路径
实时数据的路径
mdw的路径
然后点击“全部删除”按钮
和3盒要
驱动实时数据
驱动实时代码
直播MDW
最后是激活更改的按钮,然后是关闭按钮。
好的,它如何运作?
首先,我有一个名为basConstants的模块,该模块除其他功能外还存储各种文件的预期路径。 这是在启动时使用的,这样我就不会意外地将数据库指向错误的文件发送到非洲或印度。
basConstants拥有以下内容
Option Compare Database
Option Explicit
Global Const LIVECODE = "c:\bissau\BissauCode.mdb"
Global Const LIVEDATA = ";DATABASE=z:\Bissau\BissauData.mdb"
Global Const LIVEMDW = "z:\bissau\bissau.mdw"
在表单的打开事件中,我有以下内容
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Form_Open_Err
LCode = LIVECODE
LData = LIVEDATA
LMDW = LIVEMDW
Form_Open_Exit:
Exit Sub
Form_Open_Err:
MsgBox Err.Description & " in Form_Open"
Resume Form_Open_Exit
End Sub
这样便打开了表单,显示了当前链接。
下一个
DropAll非常简单,它将删除所有链接到附加表的链接,这是它的代码。
Private Sub cmdDropAll_Click()
On Error GoTo cmdDropAll_Click_Err
Dim db As Database
Dim td As TableDef
Dim i As Integer, j As Integer, var As Variant
Dim strAttach As String
Set db = CurrentDb
For i = 0 To db.TableDefs.Count - 1
Set td = db.TableDefs(i)
strAttach = td.Connect
If Len(strAttach & "") > 0 Then
db.Execute "DROP TABLE " & td.Name & ";"
End If
Next
Set td = Nothing
Set db = Nothing
MsgBox "All Tables Dropped"
cmdDropAll_Click_Exit:
Exit Sub
cmdDropAll_Click_Err:
MsgBox Err.Description & " in cmdDropAll_Click"
Resume cmdDropAll_Click_Exit
End Sub
下一个
现在好了,重新连接到另一个驱动器。 这是“激活更改”
Private Sub cmdChangeDrive_Click()
On Error GoTo cmdChangeDrive_Click_Err
Dim db As Database
Dim td As TableDef
Dim i As Integer, j As Integer, var As Variant
Dim strAttach As String
Dim strNewAttach As String
Dim strNewCode As String
Dim strNewMDW As String
Dim mdl As Module
Dim intLine As Integer, strLine As String
strNewCode = NewLiveCode & Right(LCode, Len(LCode) - 1)
strNewAttach = Left(LData, 10) & NewLiveData & Right(LIVEDATA, Len(LIVEDATA) - 11)
strNewMDW = NewLiveMDW & Right(LMDW, Len(LMDW) - 1)
DoCmd.OpenModule "basConstants"
' Return reference to Module object.
Set mdl = Modules("basConstants")
For intLine = 1 To mdl.CountOfDeclarationLines
strLine = mdl.Lines(intLine, 1)
If InStr(strLine, "LIVECODE") > 0 Then
mdl.ReplaceLine intLine, "Global Const LIVECODE = " & Chr(34) & strNewCode & Chr(34)
End If
If InStr(strLine, "LIVEDATA") > 0 Then
mdl.ReplaceLine intLine, "Global Const LIVEDATA = " & Chr(34) & strNewAttach & Chr(34)
End If
If InStr(strLine, "LIVEMDW") > 0 Then
mdl.ReplaceLine intLine, "Global Const LIVEMDW = " & Chr(34) & strNewMDW & Chr(34)
End If
Next
DoCmd.Close acModule, "basConstants", acSaveYes
Set db = CurrentDb
For i = 0 To db.TableDefs.Count - 1
Set td = db.TableDefs(i)
strAttach = td.Connect
If Len(strAttach & "") > 0 Then
td.Connect = strNewAttach
td.RefreshLink
End If
Next
Set td = Nothing
Set db = Nothing
MsgBox "All Tables Changed"
cmdChangeDrive_Click_Exit:
Exit Sub
cmdChangeDrive_Click_Err:
MsgBox Err.Description & " in cmdChangeDrive_Click"
Resume cmdChangeDrive_Click_Exit
End Sub
因此,这种简单的形式使我可以快速将c:驱动器开发代码更改为多用户Z:驱动器代码,而无需手动删除数十个表并重新链接,而不必忘记一个表,或者删除一个本地表表。
我必须每周在多个数据库上执行2-3次此任务。
希望明天我可以附加一个示例数据库,其中包含所有代码。
同样,这是用Access 2003编写的。
附带的是一个Access 2003数据库,其形式为fdlgDropAll,其中包含上面的所有代码。
From: https://bytes.com/topic/access/insights/908482-how-change-backend-database-links-access-2003-a