Изменение источника доступа к связанной таблице 2016 - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь изменить ссылки в базе данных Access 2016, но метод, который я использовал в прошлом, не работает должным образом.

Я использую

 t.connect="new connection"
 t.refreshlink

метод, где t - это таблица.

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

В настоящее время я не получаю ошибок, но сразу после .refreshlink таблица .connect остается прежней.

Возможно ли это по-прежнему?

В настоящее время я заполняю словарь именем таблицы и ее существующим соединением, но только если не ODB C .

Затем я перебираю этот словарь, получаю таблицу и меняю ее соединение

CurrentDb.TableDefs(strTableName).Connect = strNewConnection
CurrentDb.TableDefs(strTableName).RefreshLink
Debug.Print CurrentDb.TableDefs(strTableName).Connect

Существующее соединение = ;DATABASE=\\app01\Access\CRM_Data.mdb Новое соединение = ;DATABASE=C:\CRM_TEST\CRM_DATA_BE_2016.accdb

Многие спасибо

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вы не должны использовать CurrentDb.TableDefs при изменении таблиц, так как это меняется между вызовами и делает ссылку на tabledef, где вы изменяете строку соединения, отличной от той, в которой вы ссылаетесь sh ссылка.

Dim d As DAO.Database
Set d = CurrentDb
d.TableDefs(strTableName).Connect = strNewConnection
d.TableDefs(strTableName).RefreshLink

AFAIK это поведение не зависит от версии, поэтому предоставленный вами код никогда не должен был работать.

0 голосов
/ 11 марта 2020

Я использую этот код в Access 2016, и он прекрасно работает:

Public Function RelinkTables(environment As Integer)

    On Error Resume Next
    Dim tblDef As DAO.TableDef

    For Each tblDef In CurrentDb.TableDefs    
        If tblDef.Connect <> "" Then
            tblDef.Connect = GetConnectionString(environment)
            tblDef.RefreshLink
        End If    
    Next

End Function

Public Function GetConnectionString(environment As Integer) As String
    Select Case environment
        Case 1 ' connection to Test db
            GetConnectionString = "your connection string to Test"
        Case 2  ' connection to Prod db
            GetConnectionString = "your connection string to Production"
    End Select
End Function

Если это не сработает с вашей БД, возможно, путь неверный.

...