ACCESS - Pb de primary key auto à l'ajout d'une table/req

Fermé
ALESS - 27 mai 2022 à 23:39
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 - 30 mai 2022 à 19:31
Bonjour,

Je découvre Access depuis hier et je n'en ai vraiment pas l'habitude.
J'ai plusieurs tables identiques provenant de différentes sources. Une primary key via un numero auto ID a été générée pour chacune d'entre elles donc évidemment, on trouve plusieurs fois la même primary key lorsqu'on souhaite les fusionner. Il y a un SGBD mais aucune de ces tables ne possède de lien basé sur cette clé primaire. Pour pouvoir ajouter toutes ces tables, j'ai d'abord créé une requête union, puis une requête ajout. C'est là ou ça bloque.
Même lorsque je retire la clé primaire du champ, ou même quand je supprime tous les champs ID, je ne peux pas ajouter les résultats de ma requête à ma table pour des raisons de violation de clé (malgré des tentatives d'enregistrement).
N'y a t-il pas un moyen simple d'ajouter ces données soit en générant automatiquement un numéro auto et unique pour les enregistrements ajoutés, soit en forçant la possiblité de doublon, quitte à réinitialiser le tout à la fin, puisque la clé primaire n'est utilisée pour aucune relation?
Là j'en suis à exporter ma requête sur Excel, remplir avec un numéro d'incrémentation qui part du chiffre suivant celui de ma table d'accueil, et franchement c'est ultra pénible.

Merci beaucoup pour votre aide! je suis nulle et je ne suis pas censée l'être!

Configuration: Windows / Edge 101.0.1210.53

7 réponses

jee pee Messages postés 39967 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 juillet 2024 9 258
Modifié le 28 mai 2022 à 12:10
Bonjour,

Je ne pratique pas du tout Access, c'est juste une suggestion sur le principe.

Si tes tables à fusionner sont du type (id, champ1, champ2, ...), tu vas créer une nouvelle table avec les mêmes champs mais il faut indiquer que id est de type autoincrément, alors c'est le système qui l'insère et le génère. Et après tu remplis cette table en spécifiant les champs, sauf id, avec
insert tfusion (champ1, champ2) select champ1, champ2 from t1
                                union
                                select champ1, champ2 from t2
                                union ...

Ou comme tu n'as pas besoin de l'id, tu peux créer une table sans cle (champ1, champ2) et la remplir avec la même requête.

blackmefias_3350 Messages postés 706 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 8 mars 2024 58
Modifié le 28 mai 2022 à 12:48
bonjour,

voici dans l'ordre ce que vous devez faire :

1) création des tables
exemple pour une base de gestion des stocks j'ai créer une table et je l'enregistre directement sous
le nom de : T_Categories



ici les paramètres du champ ID_Categories




Veuillez voir qu'ici j'évite de mettre des accents aussi bien sur le nom de mes tables que dans les noms des champs ceci est fait exprès pour une meilleur interprétation de la police, avec ou sans sérif .

une fois que ma première table est créée, je vais changer le champ NomCategorie pour que celui-ci devient un champ de liste déroulante .

pour cela je sélectionne le champ ici mis en jaune


et dans les paramètre du champ, je vais sur l'onglet liste de choix et je déroule la liste comme ici


Ensuite , toujours dans les paramètres du champ , dans les propriétés de la liste déroulante,

je vais sur la propriété "Origine source" je change pour 'liste valeurs" dans "contenu" et dans la cellule de droite je saisi mes données de la liste notez que celles-ci doivent être séparée par ; (point virgule) :



dans cette table, je peux enfin mettre ou ajouter des données par exemple dans le champ description.


ensuite je crée ma deuxième table et je l'enregistre directement sous le nom de T_objets


je repasse en mode données et ajoute quelques données




2) créer des relations entre ces tables Attention il ne faut pas confondre les relations et les requêtes elles n'ont pas le même rôle

pour créer une relation entre deux tables, il vous faut deux tables, mais surtout il faut qu'une des deux table contient un champs supplémentaire que l'on ajoute en fin de table il faut aussi que le type de données soit de même valeur , par exemple je peux pas mettre du texte dans une relation de table avec du numérique ( nombres )

Veuillez voir que j'ai dans ma table T_Objets ajouter un champ "ID_categories" dont le type de données est "Numérique" vous pouvez l'ajouter soit directement sur votre table en mode création soit depuis l'outil relation , il vous suffira alors de sélectionner une table( ici T_objet) faire un click droit et choisir mode création .




pour faire une relation vos table doivent ressembler à ceci :



Ici, la relation entre les deux tables indique qu'une catégorie peut au minimum contenir 1 à plusieurs objets

MLD = Modèle Logique des données

MCD = Modèle Conceptuel des données

voir : Méthode merise

je fait la relation entre le champ ID_Categories de la table T_Categories et le champ ID_categories de la table T_Objets


je quitte et enregistre la relation

et je retourne dans la table T_Categories que j'ouvre en mode" feuille de données"

dans mon exemple, il existe trois catégories GrosElectro, PetitsElectro et Meubles

dans table T_objets mon premier Objet est une table à manger donc elle se trouve dans la catégorie Meubles

pour la table T_categories, j'ai décidé que GrosElectro est sur le premier enregistrement du champ ID_Catégories comme celui-ci est un champ indexé et autoincrément, il recevra comme ID 1 , PetitElectro aura 2 dans le champ ID et Meubles aura 3 dans le champ ID de la table T_Categories.

j'espère que mon explication est claire pour vous car elle n'est pas facile à définir


donc je reviens dans ma table T_Categories et je peux voir alors un petite case avec un + si je click dessus, j'ouvre la table T_Objets et peux voir ainsi par ligne tous les objets qui se trouvent dans la catégories Meubles par exemple




Veuillez voir que j'ai cliqué sur la + de la troisième ligne de ta table T_Categories et ainsi je peux voir les données qui se rapportent à l'ID 3 dont la valeur est : Meubles .


3) créer une ou des requêtes (les requêtes permettant de faire des recherches, tris sur les tables)

4) créer le ou les formulaires et voir sous-formulaires


par contre si vous importez des tables, dans le choix de créer une clé primaire , je vous suggère plûtot de choisir par vous même le champs ID car si vous le faites automatiquement, le champs ID sera ajouter à votre table qui en possède peut être déjà une.







@jee pee:
Merci beaucoup pour votre réponse, j'ai essayé de faire sans l'ID effectivement mais il refuse si le nombre et les champs ne sont pas strictement identiques :(

@ blackmefias:
Merci beaucoup pour votre réponse, là est justement le problème: je ne peux pas partir d'une nouvelle table et tout recréer. Il y a une base access avec toutes les tables toutes les relations, et des ID en numéro auto et clé primaire dont je n'arrive pas à modifier le statut (avec doublons, retrait de la clé). En fait la société pour laquelle je viens de démarrer ce nouveau job a tout simplement dupliqué une base access avec plein de tables, plein de relations, plein de règle sd'intégrité, et il faudrait tout compiler. Merci en tout cas pour le soin apporté à la description, cela va m'être très utile pour la suite et dans mon apprentissage d'Access!
blackmefias_3350 Messages postés 706 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 8 mars 2024 58
29 mai 2022 à 21:50
pour bien débuter access, je vous suggère de visiter ce site grenier.self-access.com
0
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 496
30 mai 2022 à 12:38
Il serait utile que tu donnes des détails sur les champs de tes tables.
Quel message d'erreur reçois-tu?
0
Merci pour le site!

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
@yg_be bonjour!
j'ai plusieurs bases access de structure identique (tables, formulaires, requêtes, relations). Le problème est qu'il y a des tables à fusionner comportant des clés primaires en num auto et des clés secondaires. les opérations effectuées:
1. ouverture d'une des bases
2. import de toutes les autres tables des autres bases
3. union des tables importées de structure identique (parfois ça déconnait à cause d'un champ manquant, corrigé)
4. ajout de cette union à la table "d'accueil" déjà présent, pour chacune des tables = BIG FAIL à cause du numéro auto
5. Retrait de la clé primaire de la requête puis ajout = FAIL
Retrait du champ carrément ID puis ajout = FAIL
Tentative de modification du champ ID d"accueil" - retrait clé primaire et/ou suppression du champ ID (étant donné qu'en plus ce champ n'est utilisé dans AUCUNE relation! apparemment)
FAIL FAIL FAIL
6. Export sous Excel des requêtes, incrémentation manuelle de l'ID, import dans base puis ajout table OK, sur plusieurs tables 2 avec seulement un enregistrment posant problème, et par contre une table bien KO avec 964 enregistrements en FAIL sur 3297.
7. Impossible d'ouvrir un des formulaires le paramètre de la propriété ChampsPères est à l'origine de l'erreur suivante un pb est survenu durant la communication entre microsoft access et le serveur OLE ou le controle ActiveX
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 496
30 mai 2022 à 15:21
Tu ne donnes aucune information sur la structure de tes tables, la source SQL de tes requêtes, ni sur les messages d'erreur.
0
les structures des tables sont identiques ce qui compte c'est quelles ont toutes un ID en autoincrement, le reste ça roule
Pour les requetes c'est du UNION, et puis ensuite du INSERT INTO
Les messages d'erreur "XXX enregistrements n'ont pu être ajoutés en raison de violation de clé"

Là j'ai réussi à toutes les intégrer mis à part la dernière table ou je rencontre beaucoup d'enregistrements refusés

et le dernier problème que je n'arrive pas à résoudre c'est l'ouverture du formulaire "Le paramètre de la propriété ChampsPères est à l'origine del'erreur suivante: un pb est sruvenu durant la communicayion entre Microsoft Access et le serveur OLE ou le controle ActiveX" => l'expression sur ouverture entrée comme paramètre de la propriété d'évènement est à l'origine d'une erreur"
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 496
30 mai 2022 à 19:24
Tu ne donnes aucune information sur la source SQL de tes requêtes.
0
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 496
30 mai 2022 à 19:31
si ta requête INSERT donne une erreur "violation de clé", c'est que tu n'as pas défini ta table de destination comme tu expliques "Retrait de la clé primaire de la requête", ou bien que tu as une autre clé unique dans cette table.
0
Pardon je ne comprends pas. Je fais des simples ajout et union sur les tables que j ai préalablement importées dans ma base un simple insert into et union
yg_be Messages postés 22998 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 juillet 2024 1 496
Modifié le 30 mai 2022 à 19:35
visualise tes requêtes en mode "SQL", puis partage ici le texte affiché.
0