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
2 odpowiedzi
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ć.
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.
Podobne pytania
Nowe pytania
vba
Visual Basic for Applications (VBA) to sterowany zdarzeniami, zorientowany obiektowo język programowania do pisania makr, używany w całym pakiecie Office, a także w innych aplikacjach. VBA nie jest odpowiednikiem VB.NET ani VBS; jeśli pracujesz w programie Visual Studio, użyj adresu [vb.net]. Jeśli twoje pytanie dotyczy konkretnie programowania dowolnej aplikacji MS Office, użyj również odpowiedniego tagu: [excel], [ms-access], [ms-word], [outlook] lub [ms-project].