CtrlLiens.bas 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. Option Compare Database
  2. 'Option Explicit
  3. Dim i As Long
  4. Dim db As DAO.Database
  5. Dim rs As DAO.Recordset
  6. Dim Tbl As TableDef
  7. Dim chemin As String
  8. Dim Connection(20), ConnectionGood(20) As String
  9. Dim iMax As Byte
  10. Public strFiltre As String
  11. Public strFile As String
  12. Public strNomFile As String
  13. Public RetVal As Long
  14. Public Function Controler_Liens() 'Fonction de contrôle des liens
  15. Dim ConnectOK As Boolean
  16. Dim Phrase, nomFichier As String
  17. Dim j As Byte
  18. iMax = 0
  19. DoCmd.OpenForm "frm_TablesAttachees", acNormal, , , , acWindowNormal
  20. On Error Resume Next
  21. Set db = CurrentDb()
  22. For i = 0 To db.TableDefs.Count - 1
  23. Set Tbl = db.TableDefs(i)
  24. If (Left(Tbl.Name, 4) <> "Msys") And (Tbl.Attributes = dbAttachedTable) Then
  25. Message "Table : " & Tbl.Name & "..."
  26. Set rs = db.OpenRecordset(Tbl.Name)
  27. DoEvents
  28. err.Clear
  29. j = 0
  30. ConnectOK = False
  31. 'Cherche le nom de la base à connecter
  32. nomFichier = ExtraitNomFichier(ExtraitNomDb(Tbl.Connect))
  33. If IsNull(DLookup("valeur", "tbl_parametre", "parametre='" & nomFichier & "'")) Then
  34. MsgBox "Attention, Problème de définition des paramètres pour la base " & nomFichier & ", Vérifier tbl_parametre et recommencez"
  35. Sclose
  36. DoCmd.Close acForm, "TablesAttachees"
  37. Exit Function
  38. End If
  39. 'Cherche l'adresse de la base dans les parametres
  40. nomFichier = DLookup("valeur", "tbl_parametre", "parametre='" & nomFichier & "'") & nomFichier
  41. 'Lie à cette base
  42. If TestExisteFichier(nomFichier) Then
  43. nomFichier = ";DATABASE=" & nomFichier & ";UID="""";PWD="""""
  44. Rafraichir_Liens Tbl.Name, nomFichier
  45. ConnectOK = True
  46. End If
  47. 'Sinon recherche manuellement
  48. If Not ConnectOK Then
  49. Phrase = "La table " & Tbl.Name & " ne peut plus être liée à la base " & ExtraitNomDb(Tbl.Connect) & vbNewLine _
  50. & "La manipulation est stoppée, Vérifiez vos paramètres et recommencez..."
  51. MsgBox Phrase, , "Tables attachée en erreur"
  52. Sclose
  53. DoCmd.Close acForm, "frm_TablesAttachees"
  54. Exit Function
  55. End If
  56. End If
  57. rs.Close
  58. ' End If
  59. Next i
  60. Sclose
  61. DoCmd.Close acForm, "frm_TablesAttachees"
  62. End Function
  63. Private Sub Sclose()
  64. db.Close
  65. Set rs = Nothing
  66. Set Tbl = Nothing
  67. Set db = Nothing
  68. End Sub
  69. Private Sub Rafraichir_Liens(TableName As String, CheminConnu As String, Optional AncienChemin As String) 'Sub pour rétablir les liens des tables entre les 2 bases
  70. Dim i2 As Long
  71. On Error GoTo Err_Rafraichir_Liens
  72. If CheminConnu = "" Then
  73. chemin = OpenFile("Recherche de la base " & ExtraitNomFichier(ExtraitNomDb(AncienChemin)), , True)
  74. ConnectionGood(iMax - 1) = ";DATABASE=" & chemin & ";UID="""";PWD="""""
  75. Else
  76. chemin = CheminConnu
  77. End If
  78. For i2 = 0 To db.TableDefs.Count - 1
  79. Set Tbl = db.TableDefs(i2)
  80. If Tbl.Name = TableName Then
  81. If CheminConnu = "" Then
  82. Tbl.Connect = ";DATABASE=" & chemin & ";UID="""";PWD="""""
  83. Else
  84. Tbl.Connect = CheminConnu
  85. End If
  86. Tbl.RefreshLink
  87. End If
  88. Next i2
  89. Message "Lien de la table " & TableName & " réparé."
  90. Exit Sub
  91. Err_Rafraichir_Liens:
  92. MsgBox "La Table " & Tbl.Name & " liée à votre base principale " & _
  93. ExtraitNomDb(chemin) & " ne peut pas être réparée.", vbCritical
  94. Message "La Table " & Tbl.Name & " -> " & ExtraitNomDb(AncienChemin) & " n'est pas plus attachée."
  95. err.Clear
  96. End Sub
  97. Private Sub Message(texte As String)
  98. forms("frm_TablesAttachees").tbMessage = forms("frm_TablesAttachees").tbMessage & texte & vbNewLine
  99. End Sub
  100. Public Function TestExisteFichier(Path As String) As Boolean
  101. If dir(Path) = "" Then
  102. TestExisteFichier = False
  103. Else
  104. TestExisteFichier = True
  105. End If
  106. End Function
  107. Function ExtraitNomDb(strNomConnect As String) As String
  108. Dim i As Long
  109. i = InStr(11, strNomConnect, ";")
  110. ExtraitNomDb = Mid(strNomConnect, 11, Len(strNomConnect) - i + 12)
  111. End Function
  112. 'Renvoi le nom du répertoire de la base de données
  113. Function fCurrentDBDir() As String
  114. Dim strDBPath As String
  115. Dim strDBFile As String
  116. strDBPath = CurrentDb.Name
  117. strDBFile = dir(strDBPath)
  118. fCurrentDBDir = Left(strDBPath, Len(strDBPath) - Len(strDBFile))
  119. End Function
  120. Public Function OpenFile(Optional strTitle As Variant, _
  121. Optional strInitialDir As Variant, _
  122. Optional MultiSelect As Boolean = False) As String
  123. If IsMissing(strTitle) Then
  124. strTitle = "Ouvrir..."
  125. End If
  126. If IsMissing(strInitialDir) Then
  127. strInitialDir = CurDir
  128. End If
  129. OpenFile = ""
  130. strFiltre = "Fichiers Access" & Chr$(0) & "*.mdb"
  131. With Dialogue
  132. .lStructSize = Len(Dialogue)
  133. .lpstrFilter = strFiltre
  134. .lpstrFile = Space(254)
  135. .nMaxFile = 255
  136. .lpstrFileTitle = Space(254)
  137. .nMaxFileTitle = 255
  138. .lpstrInitialDir = strInitialDir
  139. .lpstrTitle = strTitle
  140. If MultiSelect = False Then
  141. .flags = OFN_FileMustExist + _
  142. OFN_HideReadOnly + _
  143. OFN_PathMustExist
  144. Else
  145. .flags = OFN_FileMustExist + _
  146. OFN_HideReadOnly + _
  147. OFN_PathMustExist + _
  148. OFN_AllowMultiSelect + _
  149. OFN_LongNames + _
  150. OFN_EXPLORER
  151. End If
  152. End With
  153. 'RetVal = GetOpenFileName(Dialogue)
  154. 'If RetVal >= 1 Then
  155. ' OpenFile = fMultiSelect(Dialogue.lpstrFile)
  156. 'Else
  157. ' OpenFile = ""
  158. ' Exit Function
  159. 'End If
  160. End Function