Liaison des tables (Dorsale Frontale)
Fermé
jadami
-
20 août 2017 à 14:15
yg_be Messages postés 22694 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 23 août 2017 à 22:04
yg_be Messages postés 22694 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 23 août 2017 à 22:04
A voir également:
- Liaison des tables (Dorsale Frontale)
- Table des matières word - Guide
- Liaison excel introuvable ✓ - Forum Excel
- Excel transposer avec liaison ✓ - Forum Excel
- Caméra frontale telephone portable ✓ - Forum Mobile
- Table des annexes word ✓ - Forum Word
8 réponses
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
20 août 2017 à 20:09
20 août 2017 à 20:09
bonjour, que se passe-t-il quand tu exécutes ta fonction
AttacheTblpas à pas?
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
21 août 2017 à 01:27
21 août 2017 à 01:27
Bonjour,
Le pas à pas sur AttacheTbl donne ceci:
1-Toutes les tables liées, le code ne passe pas sur AttacheTbl.
2- Une seule table déliée, idem le code ne passe pas sur AttacheTbl et la liaison ne se fait pas.
3- Toutes les tables déliées, le code passe sur AttacheTbl et toutes les liaisons se font correctement.
Salutations
Le pas à pas sur AttacheTbl donne ceci:
1-Toutes les tables liées, le code ne passe pas sur AttacheTbl.
2- Une seule table déliée, idem le code ne passe pas sur AttacheTbl et la liaison ne se fait pas.
3- Toutes les tables déliées, le code passe sur AttacheTbl et toutes les liaisons se font correctement.
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
21 août 2017 à 09:06
21 août 2017 à 09:06
le soucis est peut-être avec ceci:
pourquoi fais-tu cela?
If Not (GetCheminDBName("tbl Adhérents") = strCheminBd)
pourquoi fais-tu cela?
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
>
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
21 août 2017 à 10:54
21 août 2017 à 10:54
Bonjour,
Je voulais savoir si la bd avait bougé en testant son chemin.
En fait je voudrais utiliser AttacheTbl uniquement si un lien est rompu, ou si la base
a été déplacée.
Apparemment je m’y prends mal.
Salutations
If Not (GetCheminDBName("tbl Adhérents") = strCheminBd)
Je voulais savoir si la bd avait bougé en testant son chemin.
En fait je voudrais utiliser AttacheTbl uniquement si un lien est rompu, ou si la base
a été déplacée.
Apparemment je m’y prends mal.
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
>
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
21 août 2017 à 11:28
21 août 2017 à 11:28
si je comprends bien, tu ne fais rien si la base frontale et la base dorsale sont dans le même dossier. ai-je bien compris?
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
21 août 2017 à 12:50
21 août 2017 à 12:50
Oui si les liaisons sont correctes et complètes on ne fait rien.
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
21 août 2017 à 13:30
21 août 2017 à 13:30
je te suggère de supprimer le "if" mentionné en #3.
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
21 août 2017 à 14:32
21 août 2017 à 14:32
If Not (GetCheminDBName("tbl Adhérents") = strCheminBd)
C'est bien de ce if dont on parle ?
Mais alors, à chaque ouverture de la base il y aura suppression et
création des liaisons.
Ne peut-on pas éviter cela ?
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
21 août 2017 à 14:39
21 août 2017 à 14:39
voyons d'abord si cela fonctionne sans le if.
ensuite tu essaieras de trouver une bonne logique pour détecter si un lien est rompu.
ensuite tu essaieras de trouver une bonne logique pour détecter si un lien est rompu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
22 août 2017 à 13:14
22 août 2017 à 13:14
Bonjour,
En supprimant le if toutes les liaisons se font correctement.
"une bonne logique pour détecter si un lien est rompu."
Je pense qu’en faisant un test sur le nb de liaisons et le nb de tables de « tbl Attachees » cela pourrait marcher.
Est-ce que la logique est correcte ?
Salutations.
En supprimant le if toutes les liaisons se font correctement.
"une bonne logique pour détecter si un lien est rompu."
Je pense qu’en faisant un test sur le nb de liaisons et le nb de tables de « tbl Attachees » cela pourrait marcher.
'Boucle sur les tables
For Each tbdTables In db.TableDefs
'Teste l'attribut pour savoir si c'est une table liée
If tbdTables.Attributes And dbAttachedTable Then
'Compte les tbl liées
NbdbAttachedTable = NbdbAttachedTable + 1
'Détermine le nb de tbl
NbTblAttachees = DCount("*", "Tbl Attachees")
'Compare les deux valeurs
If Not NbdbAttachedTable = NbTblAttachees Then
Code attacheTbl
Est-ce que la logique est correcte ?
Salutations.
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
22 août 2017 à 13:19
22 août 2017 à 13:19
je me demande si tu ne dois pas faire .Connect pour vérifier qu'un lien n'est pas rompu. cela te permettrait aussi de rétablir uniquement les liens rompus.
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
23 août 2017 à 09:55
23 août 2017 à 09:55
Bonjour,
Voilà ce que j’ai fait.
Cela fonctionne, mais est-ce que c’est correct ?
Pour tester un lien rompu, y a t’il un moyen de rompre un lien sur une base ?
Mes bases frontale et dorsale sont dans un même répertoire et le code fonctionne correctement. Mais en mettant la dorsale sur un autre répertoire cela ne marche pas.
Peut-être faudrait-il ajouter une boite de dialogue pour changer le chemin ?
Salutations
Voilà ce que j’ai fait.
'--- Initialise le nb d'attache
NbdbAttachedTable = 0
'--- Boucle Parcourant toutes les tables de la Bd en cours
For Each tbdTables In db.TableDefs
'Teste L'attribut de la table pour savoir si c'est une table liée
If tbdTables.Attributes And dbAttachedTable Then
'Redéfini la propriété connect de la table avec la nouvelle base
tbdTables.Connect = ";DATABASE=" & strCheminBdDorsale
'Remet à jour la liaison de la table
tbdTables.RefreshLink
'Compte les tbl liées
NbdbAttachedTable = NbdbAttachedTable + 1
End If
Next tbdTables
'--- Compte le nb de tables "tbl Attachees"
NbTblAttachees = DCount("*", "Tbl Attachees")
'--- Compare les deux valeurs
If Not NbdbAttachedTable = NbTblAttachees Then
'--- Ouverture du recordset rs des tables à éxaminer...
Set rs = db.OpenRecordset("tbl Attachees")
'--- Boucle sur les champs de la table
While Not rs.EOF
DetacheTbl rs![NomTablesAttachees]
AttacheTbl rs![NomTablesAttachees], strCheminBdDorsale, rs![NomTablesAttachees]
rs.MoveNext
Wend
End If
Cela fonctionne, mais est-ce que c’est correct ?
Pour tester un lien rompu, y a t’il un moyen de rompre un lien sur une base ?
Mes bases frontale et dorsale sont dans un même répertoire et le code fonctionne correctement. Mais en mettant la dorsale sur un autre répertoire cela ne marche pas.
Peut-être faudrait-il ajouter une boite de dialogue pour changer le chemin ?
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
23 août 2017 à 10:29
23 août 2017 à 10:29
tu peux rompre un lien en changeant le nom de la table destination dans la base dorsale.
si tu déplaces ta base dorsale, ton code ne peut pas deviner où elle se trouve. elle peut chercher où elle se trouve, ou bien demander de l'information.
si tu déplaces ta base dorsale, ton code ne peut pas deviner où elle se trouve. elle peut chercher où elle se trouve, ou bien demander de l'information.
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
23 août 2017 à 13:36
23 août 2017 à 13:36
elle peut chercher où elle se trouvePeux-tu stp me donner un piste ?
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
23 août 2017 à 17:10
23 août 2017 à 17:10
eh bien , par exemple, si tu sais que la base est quelque part sur le disque C, le code VBA peut parcourir le disque pour chercher si un fichier d'un nom connu est présent quelque part.
jadami
Messages postés
103
Date d'inscription
mercredi 14 mars 2007
Statut
Membre
Dernière intervention
18 septembre 2020
23 août 2017 à 21:25
23 août 2017 à 21:25
eh bien , par exemple, si tu sais que la base est quelque part sur le disque C
Merci pour les explications.
tu peux rompre un lien en changeant le nom de la table
J'ai changer le nom de la table, et j'ai un message "Access na pas pu trouver la table x ,,,,,,,,," le code s'arrête sur
tbdTables.RefreshLink
est-ce normal ?
Désolé de te solliciter aussi souvent.
Salutations
yg_be
Messages postés
22694
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 avril 2024
1 471
23 août 2017 à 22:04
23 août 2017 à 22:04
à première vue, cela me semble normal, cela veut dire que le lien est rompu.