Access VBA tester si on a une table liée
Résolu/Fermé
artamys
Messages postés
120
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
-
29 août 2008 à 16:30
yakov Messages postés 113 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 13 juin 2009 - 2 sept. 2008 à 12:07
yakov Messages postés 113 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 13 juin 2009 - 2 sept. 2008 à 12:07
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.
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.
A voir également:
- Access VBA tester si on a une table liée
- Table ascii - Guide
- Flash drive tester - Télécharger - Divers Utilitaires
- Table des matières word - Guide
- Tester son pc - Guide
- Tester composant pc - Guide
3 réponses
yakov
Messages postés
113
Date d'inscription
mardi 19 août 2008
Statut
Membre
Dernière intervention
13 juin 2009
77
2 sept. 2008 à 08:31
2 sept. 2008 à 08:31
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
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
artamys
Messages postés
120
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
7
2 sept. 2008 à 09:48
2 sept. 2008 à 09:48
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
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
yakov
Messages postés
113
Date d'inscription
mardi 19 août 2008
Statut
Membre
Dernière intervention
13 juin 2009
77
2 sept. 2008 à 12:07
2 sept. 2008 à 12:07
bien... mais plus compliqué quand même....