| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- Option Compare Database
- ' ** Access Toolbox Module **
- ' on 2017-02-28,
- ' @author: Olivier Massot
- ' V 1.0
- ' Manage external databases
- Public Function EtatModeConnexion() As String
- On Error GoTo err
- 'renvoie le mode de connexion actuel, ou une chaine vide si celui-ci ne peut être determiné
- Dim table As DAO.TableDef
- Dim modeConnexion, dirConnexionTable, modeConnexionTable As String
- Dim compte, compteErr As Integer
- 'à noter: dans la table des bases dorsales, mode de connexion = '*' pour que cette base soit ignorée lors des tests
-
- modeConnexion = ""
- If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
-
- For Each table In CurrentDb.TableDefs
- If Len(table.Connect) > 0 Then
- dirConnexionTable = replace(table.Connect, ";DATABASE=", "")
- modeConnexionTable = Nz(DFirst("Mode", "ztblBasesDorsales", "[NomBase]='" & extraitNomFichier(dirConnexionTable) & "' AND [rep]='" & repFichier(dirConnexionTable) & "'"), "")
- If modeConnexionTable = "*" Then
- 'on passe à la suite
- ElseIf Len(modeConnexionTable) > 0 Then
- 'c'est une table liée
- If Len(modeConnexion) = 0 Then
- modeConnexion = modeConnexionTable
- Else
- If modeConnexion <> modeConnexionTable Then GoTo errConnexionsIncoherentes
- End If
- Else
- GoTo errBaseIntrouvable
- End If
- End If
- Next table
- EtatModeConnexion = modeConnexion
- fin:
- Exit Function
- err:
- MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & err.Description
- GoTo fin
- errZtbl:
- MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "La table ztblBasesDorsales est manquante"
- GoTo fin
- errBaseIntrouvable:
- MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "La base d'une table est introuvable dans ztblBasesDorsales"
- GoTo fin
- errConnexionsIncoherentes:
- MsgBox "Erreur lors de la détermination du mode de connexion:" & vbNewLine & "Connexions incohérentes détectées"
- GoTo fin
- End Function
- Public Sub choisirModeConnexion()
- On Error GoTo err
- If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
- If Not formExiste("zfrmBasesDorsales") Then GoTo errZfrm
- DoCmd.OpenForm "zfrmBasesDorsales"
-
- fin:
- Exit Sub
- err:
- MsgBox "Erreur en cours de procédure:" & err.Description
- GoTo fin
- errZtbl:
- MsgBox "Erreur: la table ztblBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
- GoTo fin
- errZfrm:
- MsgBox "Erreur: le formulaire zfrmBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
- GoTo fin
- End Sub
- Public Function majConnectionsAppli(ByVal mode As String) As Boolean
- 'met à jour les connections de toutes les tables
- Dim table As DAO.TableDef
- Dim compte, compteOK As Integer
- compte = 0
- compteOK = 0
-
- majConnectionsAppli = False
-
- If Not tableExiste("ztblBasesDorsales") Then GoTo errZtbl
- If Not formExiste("zfrmBasesDorsales") Then GoTo errZfrm
- Application.Echo False
- DoCmd.Hourglass True
-
- If modeValide(mode) = False Then GoTo errModeNonValide
-
- For Each table In CurrentDb.TableDefs
- If Len(table.Connect) > 0 Then
- 'c'est une table liée
- compte = compte + 1
- If ConnectMdb(table.name, mode, True) = True Then compteOK = compteOK + 1
- End If
- Next table
- If compteOK <> compte Then GoTo errErreursDetectees
- majConnectionsAppli = True
- Application.Echo True
- MsgBox "Opération terminée"
- fin:
- Application.Echo True
- DoCmd.Hourglass False
- Exit Function
- err:
- MsgBox "Erreur en cours de procédure:" & err.Description
- GoTo fin
- errZtbl:
- MsgBox "Erreur: la table ztblBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
- GoTo fin
- errZfrm:
- MsgBox "Erreur: le formulaire zfrmBasesDorsales est nécessaire (cf. FonctionsCommunes.accdb)"
- GoTo fin
- errErreursDetectees:
- MsgBox "Erreur: certaines attaches ne sembles pas avoir été mises à jour correctement"
- GoTo fin
- errModeNonValide:
- MsgBox "Erreur: ce mode n'est pas reconnu"
- GoTo fin
- End Function
- Private Function ConnectMdb(ByVal tbl As String, ByVal mode As String, Optional silencieuse As Boolean = False) As Boolean
- 'met à jour la connexion de la table selon le mode de branchement demandé
- On Error GoTo err
- Dim bdd As DAO.Database
- Dim td As DAO.TableDef
- Dim connexion, nouveauRep, fichier As String
- ConnectMdb = False
- If Not tableExiste(tbl) Then GoTo errTableManq
- Set bdd = CurrentDb
- Set td = bdd.TableDefs(tbl)
- connexion = Nz(td.Connect, "") 'etat de la connexion actuelle
- If Len(connexion) = 0 Then GoTo errMajLien
- fichier = extraitNomFichier(connexion)
- If Nz(DFirst("Mode", "ztblBasesDorsales", "[NomBase]='" & fichier & "'"), "") = "*" Then GoTo reussite
- nouveauRep = Nz(DFirst("Rep", "ztblBasesDorsales", "[Mode]='" & mode & "' and [NomBase]='" & fichier & "'"), "")
- If Len(nouveauRep) = 0 Or Dir(nouveauRep, vbDirectory) = "" Then GoTo errRep
- If Right(nouveauRep, 1) <> "\" Then nouveauRep = nouveauRep & "\"
- ' Modifie la propriété Connect avec la nouvelle chaîne de connexion
- td.Connect = ";DATABASE=" & nouveauRep & fichier
- 'Met à jour la liaison
- td.RefreshLink
-
- reussite:
- ConnectMdb = True
- fin:
- If Len(msgErr) > 0 Then
- If silencieuse = True Then
- Debug.Print msgErr
- Else
- MsgBox msgErr
- End If
- End If
- Set td = Nothing
- Set db = Nothing
- Exit Function
- errTableManq:
- msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": table introuvable"
- GoTo fin
- err:
- msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": " & err.Description
- GoTo fin
- errMajLien:
- msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": impossible de déterminer l'état actuel de la connexion de la table, ce n'est peut-être pas une table liée"
- GoTo fin
- errRep:
- msgErr = "Impossible de mettre à jour la connexion de " & tbl & ": répertoire cible invalide"
- GoTo fin
- End Function
- Private Function modeValide(ByVal mode As String) As Boolean
- On Error GoTo fin
- modeValide = False
- modeValide = (DCount("Mode", "ztblBasesDorsales", "[Mode]='" & mode & "'") > 0)
- fin:
- End Function
- Public Function modeConnexionParDefaut()
- On Error GoTo fin
- modeConnexionParDefaut = ""
- modeConnexionParDefaut = Nz(DFirst("ModeDefaut", "ztblUtilisateurs", "[login]='" & CurrentUser & "'"), "")
- fin:
- End Function
|