2012-03-15 57 views
0

方案:我有一個通過鏈接表管理器數據庫工具相互鏈接的前端和後端Access 2007數據庫。後端數據庫將被移至服務器上的某個位置。每個設施的服務器名稱會有所不同,現在大約有40個左右,這一年將會增加。如何利用C#中的Access 2007鏈接表管理器

我需要嘗試完成的是以編程方式更改鏈接表。我需要將連接字符串建立喜歡的東西:

\\something\facilitynum(gathered from Environment variable)\c$\somefolder\. 

我發現,在MSysObjects列數據庫包含了需要改變的鏈接字符串。問題在於,如何獲得更改系統表的權限或使用某些.dll,這將允許我將鏈接更改爲新建的字符串?

到目前爲止,我發現的所有內容總是會導致手動更改Access數據庫中的鏈接。

+0

見http://stackoverflow.com/questions/7461414/ado-net-way-for-creating-a-linked-table – Fionnuala 2012-03-15 17:42:18

+0

謝謝我認爲這可能是我一直在尋找的。 – WillN 2012-03-15 18:06:13

+0

這就是我在尋找感謝鏈接Remou。 – WillN 2012-03-15 19:00:21

回答

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