2012-03-15 3 views
0

Сценарий: у меня есть база данных Front End и Back End Access 2007, которые в настоящее время связаны друг с другом с помощью инструмента базы данных Linked Table Manager. Бэк-конец DB будет перемещен в местоположение на сервере. Имя сервера будет отличаться для каждого объекта, а сейчас около 40, что будет увеличиваться в течение всего года.Как использовать Access 2007 Linked Table Manager в C#

Что мне нужно, чтобы попытаться выполнить программные изменения связанных таблиц. Мне нужно будет построить связанную строку что-то вроде:

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

Я обнаружил, что база данных столбца в MSysObjects содержит ссылку строку, нужно будет изменить. Возникает вопрос: как получить разрешения на изменение таблицы системы или использовать некоторую .dll, которая позволит мне изменить ссылку на недавно построенную строку?

Все, что я нашел до сих пор, всегда приводит к ручному изменению ссылки в базе данных Access.

+0

См http://stackoverflow.com/questions/7461414/ado-net-way-for-create-a-linked-table – Fionnuala

+0

Спасибо, я думаю, это может быть то, что я искал. – WillN

+0

Вот что я искал для благодарности Remou. – WillN

ответ

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 
Смежные вопросы