Próbuję zmienić linki w bazie danych dostępu 2016, ale metoda, którą używałem w przeszłości, nie działa zgodnie z wymaganiami.

Używam

 t.connect="new connection"
 t.refreshlink

Metoda, gdzie T jest tabelą.

Widziałem w połączonym Menedżerze tabeli, że tabele są teraz zgrupowane przez źródło danych. Mogę stworzyć nowe źródło i łączyć go na żądaną tabelę, ale mam wielu migrujących, więc chciałbym to zrobić w kodzie.

Nie mam żadnych błędów bieżący sposób, ale natychmiast po .refreshlink Tabela .connect jest nadal taki sam.

Czy to nadal możliwe?

Obecnie wypełnia słownik z nazwą tabeli i istniejące połączenie, ale tylko wtedy, gdy nie odbc.

Następnie jestem zapętlony przez ten słownik, zdobywając stół i zmieniając swoje połączenie

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

Istniejące połączenie = {x0}} Nowe połączenie = {x1}}

Wielkie dzięki

1
Nathan_Sav 11 marzec 2020, 13:36

2 odpowiedzi

Najlepsza odpowiedź

Podczas zmiany tabel należy używać CurrentDb.TableDefs

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

AFAIK To zachowanie nie jest zależne od wersji, więc podany kod nigdy nie powinien pracować.

1
Erik A 11 marzec 2020, 12:17

Używam tego kodu w dostępie do 2016 r. I działa dobrze:

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

Jeśli nie zadziałałoby to z twoim db niż może być ścieżka jest błędna.

0
Vlado 11 marzec 2020, 13:23