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 92 93 94 95 96 97 98 99 100 101
| Public Sub DeleteODBCTableNames()
'Supprime tout les tables attachées
'A utiliser à la fermeture de la base de données
On Error GoTo Err
Dim dbs As Database, tdf As TableDef, i As Integer
Set dbs = CurrentDb
'Parcours de toutes les tables en commençant par la fin
For i = dbs.TableDefs.Count - 1 To 0 Step -1
'Déclaration de la table trouvée
Set tdf = dbs.TableDefs(i)
'Si c'est une table liée ou interne à la frontale
'If (tdf.Attributes And dbAttachedODBC Or dbAttachedTable) Then
'Si c'est une table liée
If (tdf.Attributes And dbAttachedTable) Then
'On la supprime
dbs.TableDefs.Delete (tdf.Name)
End If
Next i
'Fermeture de la base en cours
dbs.Close
Set dbs = Nothing
Fin: Exit Sub
Err:
'MsgBox ("Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & Err.Description)
'Resume Exit_DeleteODBCTableNames
'Si erreur, on continue
Resume Next
End Sub
Function MakeLink(PathDorsale As String) As Boolean
'// Créer les attaches ACCDBà partir de la dorsale
On Error GoTo Err
'Supprime toutes les tables liées
Call DeleteODBCTableNames
DoEvents
Dim SQLDb As DAO.Database
Dim dbLocal As DAO.Workspace
'Dim I As Long
Dim tblName As String
Dim tdfCurrent As DAO.TableDef
Dim nbrTable As Long
Dim dbOptions As String
'Mot de passe
dbOptions = "Ms Access;PWD=MotDePasse"
'Connexion à la dorsale
Set dbLocal = DBEngine.Workspaces(0)
Set SQLDb = dbLocal.OpenDatabase(PathDorsale, False, False, dbOptions)
'Nombre de tables dans la dorsale
nbrTable = SQLDb.TableDefs.Count - 1
'Parcoure les tables de la dorsale
For i = 0 To nbrTable
'Nom de la table trouvée dans la boucle
tblName = SQLDb.TableDefs(i).Name
'Si ce n'est pas une table system
If Left(tblName, 1) <> "~" And Left(tblName, 4) <> "Msys" Then
'S'il existe déjà une table liée du même nom
If tblName <> CurrentDb.TableDefs(i).Name Then
'On la supprime
CurrentDb.TableDefs.Delete tblName
End If
'Création de la table liée
Set tdfCurrent = CurrentDb.CreateTableDef(tblName, dbAttachSavePWD)
tdfCurrent.Connect = dbOptions & ";DATABASE=" & PathDorsale
'Mise à jour de la création
tdfCurrent.SourceTableName = tblName
CurrentDb.TableDefs.Append tdfCurrent
End If
Next i
'Fermeture de la dorsale
SQLDb.Close
dbLocal.Close
'retour comme quoi tout s'est bien passée
MakeLink = True
Fin: Exit Function
Err:
If Err.Number = 3010 Then 'Objet existe déjà
Resume Next
ElseIf Err.Number = 3265 Then
Resume Next
Else
Call MsgBoxErreurSys
MakeLink = False
Resume Fin
End If
End Function |
Partager