Próbowałem niektóre z odpowiedzi powyżej , w szczególności odpowiedź z Martin Thompson, z którą mam pewne błędy, i dlatego zmodyfikowałem ją w następujący sposób:
Public Function reLinkTables() As Boolean
On Error GoTo ErrorRoutine
Dim sMyConnectString As String
Dim tdf As TableDef
Dim db_name As String
' The Main Answer is by Martin Thompson
' Modified by Dr. Mohammad Elnesr
'We will link all linked tables to an accdb Access file located in the same folder as this file.
'Replace the DATA file name in the following statement with the name of your DATA file:
sMyConnectString = ";DATABASE=" & CurrentProject.Path & "\"
For Each tdf In CurrentDb.TableDefs
If Len(tdf.Connect) > 0 Then
'It's a linked table, so re-link:
'First, get the database name
db_name = GetFileName(tdf.Connect)
' Then link the table to the current path
tdf.Connect = sMyConnectString & db_name
tdf.RefreshLink
End If
Next tdf
ExitRoutine:
MsgBox "All tables were relinked successfully"
Exit Function
ErrorRoutine:
MsgBox "Error in gbLinkTables: " & Err.Number & ": " & Err.Description
Resume ExitRoutine
End Function
Function GetFileName(FullPath As String) As String
Dim splitList As Variant
splitList = VBA.Split(FullPath, "\")
GetFileName = splitList(UBound(splitList, 1))
End Function
Po fininshing to, Goto Dostęp Ribon> Utwórz> Makro Z rozwijanego menu wybierz "RunCode", wówczas w rodzaju nazwy funkcja "reLinkTables", które mamy wpisane tutaj. Następnie zapisz makro o nazwie "AutoExec". Za każdym razem, gdy otworzysz bazę danych, wszystkie połączone tabele zostaną ponownie połączone z oryginalną ścieżką. Jest to bardzo przydatne, jeśli umieścisz swoje bazy danych na przenośnym nośniku.
Niedorzeczne, że program Access nie obsługuje względnych ścieżek po wyjęciu z pudełka. Jak ktoś ma wysłać klientowi podzieloną bazę danych z absolutnymi ścieżkami ?! –
Ograniczenie prawdopodobnie wynika z tego, że Access jest użytkownikiem wielorazowym - ponieważ wielu użytkowników może korzystać z tego samego pliku i istnieje blokowanie pliku - wymagana jest pełna kwalifikowana ścieżka. Proste rozwiązanie polega na tym, że twój front sprawdza, czy back-end jest dostępny (i ta kontrola może być względna). Jeśli link jest nieprawidłowy, twój kod po prostu ponownie łączy się przy starcie. W efekcie oznacza to, że aplikacja będzie działać poprawnie, jeśli zostanie przeniesiona. –