场景:我有一个前端和后端Access 2007数据库,它们当前通过链接表管理器数据库工具相互链接。后端数据库将被移动到服务器上的某个位置。每个设施的服务器名称都不同,现在大约有40个左右,全年都会增加。
我需要尝试完成的是以编程方式更改链接表。我需要将链接字符串构建为:
\\something\facilitynum(gathered from Environment variable)\c$\somefolder\.
我发现MSysObjects中的Database列包含需要更改的链接字符串。问题是,如何获得更改System表或使用某些.dll的权限,这将允许我更改新构建的字符串的链接?
到目前为止,我发现的所有内容总是会导致手动更改Access数据库中的链接。
答案 0 :(得分:0)
您可以通过编程方式更改Access中的链接(使用VBA),如此(这使用dsn文件包含实际的服务器信息)
Private Sub UpdateDSN()
On Error GoTo ErrorHandler
Dim dbPath As String
Dim connStr As String
Dim Tdf As TableDef
dbPath = Application.CodeDb.Name
dbPath = Left(dbPath, InStr(dbPath, Dir(dbPath)) - 1)
For Each Tdf In CurrentDb.TableDefs
connStr = Tdf.Connect
If InStr(1, UCase(connStr), "ODBC") Then
connStr = "odbc; FILEDSN=" & dbPath & "db.dsn;"
Tdf.Connect = connStr
Tdf.RefreshLink
End If
Next
Dim fName As String
Dim fNumber As Integer
Dim InputStr As String
fNumber = FreeFile()
fName = dbPath & "db.dsn"
Dim serverName As String
Open fName For Input As fNumber
Do While Not EOF(fNumber)
Line Input #fNumber, InputStr
If InStr(1, UCase(InputStr), "SERVER=") > 0 Then
serverName = Right(InputStr, Len(InputStr) - _
(InStr(1, InputStr, "SERVER=") + 6))
End If
Loop
ErrorHandler:
On Error GoTo 0
DoCmd.OpenForm "Main"
cap = Forms!main.Caption
If InStr(1, cap, "(") > 1 Then
cap = Left(cap, InStr(1, cap, "("))
End If
Forms!main.Caption = "db" & " (" & serverName & ")"
End Sub