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
|
Function Fn_SelectBackEnd()
' Permet de changer la localisation du Back-End sans détruire-puis-relier les tables (cf. pb des requêtes "sensibles" ?)
' .. voir la macro AutoKeys / Ctrl+Shift+B
' NB: On ne peut pas faire de Fn_CheckGVs car on est dans une config atypique
Set gvoDB = Nothing: Set gvoDB = CurrentDb
Dim target As String: target = Fn_FileSelect("accdb", "", "Sélectionnez le Back-End")
If target = "" Then Exit Function
Dim tdf As DAO.TableDef, connect As String, P1 As Long, msgerr As String
On Error Resume Next ' Pour éviter les erreurs liées aux tables inexistantes dans le nouveau Back-End
For Each tdf In gvoDB.TableDefs
If ((tdf.Attributes And dbSystemObject) = 0) And ((Left(tdf.Name, 2) = "t_") Or (Left(tdf.Name, 5) = "ttmp_")) Then
connect = tdf.connect
P1 = InStr(connect, "DATABASE=")
If P1 <> 0 Then
tdf.connect = Mid(connect, 1, P1 - 1) & "DATABASE=" & target
tdf.RefreshLink ' Même en cas d'erreur, le tdf.connect est modifié !
End If
End If
Next tdf
Set gvoDB = Nothing: Set gvoDB = CurrentDb ' Provoque un refresh des tdf.connect
For Each tdf In gvoDB.TableDefs
If ((tdf.Attributes And dbSystemObject) = 0) And ((Left(tdf.Name, 2) = "t_") Or (Left(tdf.Name, 5) = "ttmp_")) Then
If Not tdf.connect Like "*" & target & "*" Then
msgerr = msgerr & " * " & tdf.Name & vbCrLf
End If
End If
Next tdf
If msgerr <> "" Then
Fn_FlashMsgBox "Tables absentes du nouveau Back-End - A supprimer ?" & vbCrLf & msgerr & vbCrLf & vbCrLf _
& "ATTENTION : Si votre nouveau Back-End contient des tables supplémentaires, elles devront être liées manuellement."
Else
Fn_FlashMsgBox target & " : Redirection OK !" & vbCrLf & vbCrLf _
& "ATTENTION : Si votre nouveau Back-End contient des tables supplémentaires, elles devront être liées manuellement."
End If
Set gvFSO = Null: Set gvFSO = Null
' En principe, l'utilisateur corrige manuellement ce qui doit l'être avant de faire un nouveau Ctrl+Shit+U !
End Function |
Partager