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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| Sub lierToutes()
On Error GoTo gest_err_lier
Dim db As DAO.Database
Dim qdfTmp As DAO.QueryDef
Dim oTbl As DAO.TableDef
Dim rst As Recordset
Dim sql As String
Dim strNomTables() As String
Dim strCheminBd As String
Dim strConnect As String
Dim intI As Integer
Dim intNbTable As Integer
'Affiche l'indicateur de progression
lblProg.Visible = True
'Requete listant les tables "*Liste_plans.mdb" liées (Type=6)
sql = "SELECT MSysObjects.Name, MSysObjects.ForeignName, MSysObjects.Database "
sql = sql & "FROM MSysObjects "
sql = sql & "WHERE ((MSysObjects.Database Like '*Liste_plans.mdb') AND (MSysObjects.Type=6));"
'Définit le chemin de la BdD a connecter:
strCheminBd = "C:\toto.mdb"
'Définit la chaine de connexion permettant la liaison des tables
strConnect = "MS Access;DATABASE=" & strCheminBd
'Définie la base courante dans "db":
Set db = CurrentDb
'Définie la requete temporaire dans "qdftemp":
Set qdfTmp = db.CreateQueryDef("", sql) 'La chaine vide indique que c'est une requete temporaire !
With qdfTmp
'Ouvre le recordset de la requete TablesLiées
Set rst = .OpenRecordset(dbOpenDynaset)
'Compte le nombre de table dans la requête pour dimentionner le tableau strNomTables
rst.MoveLast
intNbTable = rst.RecordCount
ReDim strNomTables(intNbTable)
'Remplit le tableau strNomTables
intI = 0
rst.MoveFirst
While Not rst.EOF
strNomTables(intI) = rst.Fields(1)
'Passe au recordset suivant
intI = intI + 1
rst.MoveNext
Wend
'Fermeture du recordset
rst.Close
'Fermeture de la requete
.Close
End With
'"Effacement" de la requete
Set qdfTmp = Nothing
Set rst = Nothing
'Remet à jour les tables : Suppression -> Création -> Liaison
For intI = 0 To intNbTable - 1
'Efface la table liée
DoCmd.DeleteObject acTable, strNomTables(intI)
'Crée une nouvelle table dans la base de données courante
Set oTbl = db.CreateTableDef(strNomTables(intI))
'Lie les deux tables
oTbl.Connect = strConnect
oTbl.SourceTableName = strNomTables(intI)
'Ajoute la table à la base de données
db.TableDefs.Append oTbl
'Debug.Print intI & ") Table " & strNomTables(intI) & " mise à jour"
'Affichage de la progression sur le formulaire
lblProg.Caption = lblProg.Caption & "o"
Forms("formLogin").Repaint
Next intI
'Fermeture de la base
db.Close
Set db = Nothing
Exit_lierToutes:
Exit Sub
gest_err_lier:
MsgBox Err.Description
Exit Sub
End Sub |
Partager