Merci de cette réponse rapide, mais qu'en est-il de la sélection de plusieurs tables de destination dans ma requête Ajout ?
Merci de cette réponse rapide, mais qu'en est-il de la sélection de plusieurs tables de destination dans ma requête Ajout ?
La source peut provenir de plusieurs tables sources mais l'ajout doit se faire table par table en commençant pas la table mère. Comme toute les requetes action il vaut mieux faire table par table.
Cordialement,
Merci,
Petit récapitulatif :
- Je dois donc créer 3 requêtes qui ajouteront chacune les données de l'une de mes 3 tables Access 2002 vers la table correspondante Access 2.0.
- Je dois commencer par la table mère.
Petites précisions :
Je viens de lire l'un de vos tutoriel, et j'ai retenu quelques termes "techniques", je vais donc réexposer le problème plus précisémment.
=> Je veux exporter 3 tables d'une base Access 2002 vers une base Access 2.0
- Table1
- Table2
- Table3
=> Chacune de ces 3 tables possède une Clé Primaire
=> Table2 possède une Clé Etrangère vers Table1
=> Table3 possède une Clé Etrangère vers Table1
=> Table3 possède une Clé Etrangère vers Table2
=> Ces 3 relations sont de type Un à Plusieurs.
=> Ces 3 relations appliquent l'Intégrité Référentielle
Voilà, le contexte devrait être plus clair maintenant, j'aurais dû exposer le problème de cette manière dès le début.
Ensuite,
=> Si je résonne bien, je dois éxécuter mes requêtes dans cet ordre :
1°) Table1 => Car table mère de Table2
2°) Table2 => Car table fille de Table1 et table mère de Table3
3°) Table3 => Car table fille de Table1 et Table2
=> Les Requêtes Ajout fonctionnent correctement, mis à part :
- Les Clés Etrangères ne sont pas mises à jour avec les nouvelles valeurs des Clés Primaires correspondantes.
- La Requête Ajout de Table1 ne fonctionne pas, j'obtiens des erreus de Violations de clé, hors je ne vois pas la différence qu'il peut y avoir entre Table1 et mes deux autres tables (Table2 et Table3).
Encore merci.
Edit le 30 Mai à 14H15 :
Finallement, la Requête Ajout de Table1 fonctionne...
En fait, je restait concentré sur ces 3 liaisons, et je n'avais pas fait attention aux autres liaisons qui n'entrent pas en jeu dans ce problème lorsque des données correctes sont enregistrées (Comme je fais pleins de tests, je rentre des données à la va-vite et j'ai oublié certaines contraintes)
Mais le problème des Clés Etrangères reste complet.
Bonjour,
Je pense avoir trouvé comment contourner le problème des clés étrangères. Voici la procédure que j'ai mis en place :
1) On exporte tout les enregistrements de Table1
2) On met à jour toutes les clés étrangères de Table2 en récupérant les nouvelles clés primaires de Table1
3) On exporte tout les enregistrements de Table2
4) On met à jour toutes les clés étrangères de Table3 en récupérant les nouvelles clés primaires de Table1 et de Table2
5) On exporte tout les enregistrements de Table3
6) On supprime tout les enregistrements de Table1
7) On supprime tout les enregistrements de Table2
8) On supprime tout les enregistrements de Table3
- Pour les exportations (étapes 1, 3 et 5), pas de soucis normalement.
- Pour les mises à jour (étapes 2 et 4), problème.
- Pour les suppressions (étapes 6, 7 et 8), pas de soucis normalement.
=> Mises à jour :
Pour celà, j'utilise la requète suivante : (juste pour l'étape 2)
Avec CLE1 = Clé primaire de Table1 et clé étrangère de Table2 et de Table3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 UPDATE TABLE2 SET CLE1 = (SELECT CLE1 FROM TABLE1 IN 'D:\ACCESS2.MDB' WHERE (CHAMP1 = (SELECT CHAMP1 FROM TABLE1 WHERE CLE1 = TABLE2.CLE1) AND (CHAMP2 = (SELECT CHAMP2 FROM TABLE1 WHERE CLE1 = TABLE2.CLE1))));
Cette requête se situe donc dans ma base Access 2002.
Elle va chercher les enregistrements voulus dans la base Access 2.0 pour récupérer les nouvelles clés primaires.
Le problème est donc le suivant :
Mon UPDATE tout seul fonctionne correctement.
Mon (grand) SELECT tout seul fonctionne correctement.
Mais si je met UPDATE ... = SELECT ..., alors j'obtiens le message d'erreur suivant :
L'opération doit utiliser une requête qui peut être mise à jour.
Pourtant les deux parties séparées fonctionnent correctement, j'ai fait plusieurs tests (notamment sur le SELECT !), et je sais que tout fonctionne bien.
Mais je ne vois vraiment pas pourquoi les deux ensembles ne fonctionnent pas.
Merci de vos conseils.
Bon apparement il n'est pas possible d'utiliser SELECT avec UPDATE.
Comment puis-je faire donc pour récupérer les nouvelles clés primaires, et les enregistrer à la place de mes clés étrangères ?
Il faudrait, je pense, stocker quelque part (où ???) la valeur récupérée grâce au SELECT, puis reprendre cette valeur avec le UPDATE.
Si quelqu'un sait comment faire, ou bien a une autre idée, je suis preneur !
Merci d'avance.
Bonjour,
Je te suggère de procéder pas à pas à partir d'une requête select via le QBE,
Une fois que celle-ci correspond à ce que tu attends comme résultat (à l'affichage) tu la transforme en requête MAJ (update).
Je procéde toujours comme ça, jamais en SQL directement. Cela evite les problèmes.
Cordialement,
Merci, je vais voir ce que je peux faire via le QBE.
IMPECCABLE !
Des requêtes affichage, MAJ, ajoût, quelques jointures, une macro qui m'exécute toutes mes requêtes dans le bon ordre, et maintenant tout fonctionne correctement !
J'arrive enfin à exporter mes données Access 2002 dans ma base Access 2.0, tout en mettant à jour les clés étrangères !
Merci à Heureux-oli pour son aide !
Mais surtout, un GRAND MERCI (et même plusieurs !) à Loufab, sans qui je n'arriverais certainement toujours pas à exporter mes données !
Petites précisions sur moi : C'est la toute première fois que je travaille sur Access, et je travaille très rarement sur les bases de données, pour la simple et bonne raison que je n'aime pas tellement ça...
Bon, mon travail est loin d'être fini, il faut encore maintenant que je m'occupe des formulaires, ainsi que de la sécurité, puis pourquoi pas, faire un petit menu pour que ça soit plus sympa ! Mais mon gros problème d'exportation est maintenant règlé ! Si j'ai d'autres soucis, je n'hésiterais pas à vous poser mes questions !
P.S. : Je suis très heureux de mettre le tag "Résolu" !
Encore merci !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager