ce petit truc me permet de mettre à jour facilement le rattachement des tables d'une application access à partir d'un fichier ini (défini dans la fonction rattache table). C'est idéal quand on doit livrer une appli access et que l'environnement de dev n'est pas le même que l'environnement (ou les environnements) de production.
F_Rattache table est une fonction car cela me permet de l'appeller directement d'une macro ;-)
Source / Exemple :
Public Function F_RattacheTable(szFichier As String) As Boolean
F_RattacheTable = True
Dim TableEnCours As TableDef
Dim TableNouvel As TableDef
Dim szLgnINI As String
Set db = CurrentDb
'ouverture du fichier ini
Set obj = CreateObject("Scripting.FileSystemObject")
szFichierIni = Application.CurrentProject.Path & "\" & szFichier
' si le fichier n'existe pas on le crée (premier passage)
If Not obj.FileExists(szFichierIni) Then
P_genTableIni (szFichierIni)
Else
Set objFichierINI = obj.OpenTextFile(szFichierIni, 1, 0)
'boucle infinie jusqu'à la fin du fichier
Do
On Error Resume Next
szLgnINI = objFichierINI.ReadLine
' pour gerer simplemement la fin du fichier
If Err.Number > 0 Then
Exit Do
End If
' boucle sur la liste des tables présente
bTopTrouve = False
For Each TableEnCours In db.TableDefs
'on vérifie que c'est la bonne table
If TableEnCours.SourceTableName = Trim(Left(szLgnINI, InStr(1, szLgnINI, "=") - 1)) Then
'mise à jours du lien ssi il a changé
If TableEnCours.Connect <> Mid(szLgnINI, InStr(1, szLgnINI, "=") + 1) Then
' on met à jour la liaison seulement si la base à connecté est accessible
If obj.FileExists(Mid(szLgnINI, InStr(1, szLgnINI, "=") + 1)) The
TableEnCours.Connect = Mid(szLgnINI, InStr(1, szLgnINI, "=") + 1)
TableEnCours.RefreshLink
end if
End If
' si a traité la bonne table on sort du next et on passe à la ligne suivante du fichier
bTopTrouve = True
Exit For
End If
Next
' si la table n'est pas présente dans la liste des tables on crée le lien
If Not bTopTrouve Then
' on crée le lien seulement si la base est accessible
If obj.FileExists(Mid(szLgnINI, InStr(1, szLgnINI, "=") + 1)) The
Set TableNouvel = db.CreateTableDef(Trim(Left(szLgnINI, InStr(1, szLgnINI, "=") - 1)))
TableNouvel.Connect = Mid(szLgnINI, InStr(1, szLgnINI, "=") + 1)
TableNouvel.RefreshLink
TableNouvel.SourceTableName = Trim(Left(szLgnINI, InStr(1, szLgnINI, "=") - 1))
TableNouvel.RefreshLink
db.TableDefs.Append TableNouvel
end if
End If
Loop
objFichierINI.Close
Set objFichierINI = Nothing
End If
' fermeture des objets
Set obj = Nothing
Set db = Nothing
End Function
Public Sub P_genTableIni(szNewFichierIni As String)
Dim TableEnCours As TableDef
Dim szLgnINI As String
Set db = CurrentDb
'ouverture du fichier ini
Set obj = CreateObject("Scripting.FileSystemObject")
obj.CreateTextFile szNewFichierIni, True
Set objfINI = obj.GetFile(szNewFichierIni)
Set objWritINI = objfINI.openAsTextStream(8)
' récupération du paramétrage
For Each TableEnCours In db.TableDefs
If Len(TableEnCours.Connect) > 0 Then
szLgnINI = TableEnCours.SourceTableName & "=" & TableEnCours.Connect
objWritINI.WriteLine (szLgnINI)
End If
Next
' fermeture des objets
objWritINI.Close
Set objFichierINI = Nothing
Set objfINI = Nothing
Set obj = Nothing
Set db = Nothing
End Sub
Conclusion :
Au lancement,
- si le fichier ini n'existe pas, il est crée à partir des paramètres de liaison définie dans la base.
-Sinon, il en utilisera les paramètres pour mettre à jour (si besoin) le lien vers les bonnes bases.
La structure du fichier ini est la suivante :
NomDeLaTable=CheminDeLaTable
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.