1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| Sub VerifierTableLiees()
Dim sDorsale As String, sDorsaleDsLien As String
Dim sConn As String, sNewConn As String
Dim db As DAO.Database, tdef As DAO.TableDef
Dim ConnParams() As String, varParam As Variant
' On suppose que toutes les tables liées, le sont dans la même dorsale
' Chemin complet vers base dorsale
sDorsale = CurrentProject.Path & "\NomDeLaDorsale.mdb"
If Len(Dir(sDorsale)) = 0 Then
MsgBox sDorsale, vbExclamation, "Dorsale non trouvée"
Exit Sub
End If
Set db = CurrentDb
' Pour toutes les tables de cette bdd
For Each tdef In db.TableDefs
' Si c'est une table liée
If (tdef.Attributes And dbAttachedTable) = dbAttachedTable Then
' Extraire chemin complet vers la dorsale
sConn = tdef.Connect
sDorsaleDsLien = GetLinkedACCDB(sConn)
' Si la dorsale n'est pas la bonne, recréer le lien
If (sDorsaleDsLien <> sDorsale) Then
' Nouvelle chaîne de connexion
sNewConn = ";"
' Récuperer mot de passe si existe
ConnParams() = Split(sConn, ";")
For Each varParam In ConnParams
If varParam Like "PWD=*" Then
sNewConn = sNewConn & varParam & ";"
End If
Next
' Ajout chemin vers la base dorsale
sNewConn = sNewConn & "DATABASE=" & sDorsale
' rafraichir lien
tdef.Connect = sNewConn
tdef.RefreshLink
End If
End If
Next
End Sub
' Renvoie base liée access (Dorsale)
Function GetLinkedACCDB(strConnect As String) As String
Dim p As Long, strDBFullPathName As String
p = InStr(1, strConnect, "DATABASE=")
If p > 0 Then
strDBFullPathName = Mid(strConnect, p + Len("DATABASE="))
End If
p = InStr(1, strDBFullPathName, ";")
If p > 1 Then
strDBFullPathName = Left(strDBFullPathName, p - 1)
End If
GetLinkedACCDB = strDBFullPathName
End Function |
Partager