Access VBA tester si on a une table liée

Résolu/Fermé
Signaler
Messages postés
120
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
-
Messages postés
113
Date d'inscription
mardi 19 août 2008
Statut
Membre
Dernière intervention
13 juin 2009
-
Bonjour,
j'ai réalisée une base access en multi utilisateurs.
Le problème est que j'ai rencontré des difficultées a cause des tables liées. En effet la méthode seek primarykey ne marche pas pour les tables liées et la méthode find ne marche pas pour les tables non liées.

Donc je souhaiterai savoir s'il est possible en VBA de tester si une table est liée ou non pour intégrer cette notion dans une base que je puisse dupliquer a l'infini au lieu d'avoir besoin de changer le code au moins deux fois a chaque modification.

Merci.

3 réponses

Messages postés
113
Date d'inscription
mardi 19 août 2008
Statut
Membre
Dernière intervention
13 juin 2009
68
je te livre ici le petit code que j'utilise pour raffraichir les tables liées de ma BDD en fonction du magasin concerné.
ca devrait t'aider

en dao c'est la synthaxe suivante pour savoir si une table est liée.

dim db as dao.database
dim tb as dao.tabledef
set db=opendatabase(.......)
for each tb in db.tabledefs
if tb.attributes and dbattachedtable then
........

End If
Next
BDDClose '
db.Close
Set db = Nothing
Set tb = Nothing

j'espère que ca va t'aider
0
Messages postés
120
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
7
Merci a toi, j'ai trouvé une autre solution, mais j'essaiera la tienne.
En fait le passe par une requete qui va calculer le nombre de msysobjects. Comme dans les tables liées elles n'y figurent pas (virtuelles) si je cherche une table en particulier et qu'elle n'y est pas je la trouve et j'adapte le code en conséquences.
Ci joint le code.

Merci a toi.

dans ma requete intitulée NatureTableRequete


SELECT Msysobjects.Name, Msysobjects.Name
FROM Msysobjects
WHERE (((Msysobjects.Name)="TB_Projet") AND ((Msysobjects.Type)=1))
ORDER BY Msysobjects.Name;

dans mon code :
Dim NatureT As Integer
Dim NatureTable As Integer
NatureT = DCount("*", " NatureTableRequete")
If NatureT = 1 Then NatureTable = 1
If NatureT <> 1 Then NatureTable = 2



Set db = CurrentDb()
Set Base_modifProjet = db.OpenRecordset("TB_DEI")
If NatureTable = 2 Then Base_modifProjet.FindFirst ("NumDEI=" & ListeNumDEI & "")
If NatureTable = 1 Then Base_modifProjet.Index = "primarykey"
If NatureTable = 1 Then Base_modifProjet.Seek "=", ListeNumDEI
0
Messages postés
113
Date d'inscription
mardi 19 août 2008
Statut
Membre
Dernière intervention
13 juin 2009
68
bien... mais plus compliqué quand même....
0