IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Importation Excel -> Access, problème violation de clé [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut Importation Excel -> Access, problème violation de clé
    Bonjour à tous,

    J'ai une base Access avec une table de pays et une table de lieux. Dans la table de lieux, NomPays pointe vers la table des pays:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [PAYS].[IDPAYS], [PAYS].[NomPays] FROM PAYS ORDER BY [NomPays];
    C'est-à-dire que dans la table des lieux, le pays ne peut être choisi que dans la liste des pays déjà existants.

    J'importe un fichier Excel contenant des lieux dans lequel les noms des pays sont écrits en clair.
    Au moment d'importer, j'ai une erreur:
    Access n’a pas pu ajouter toutes les données à la table.
    Le contenu de champs de 102 enregistrements a été effacé à la suite de violations de clé.


    Access attend pour le pays un code numérique IDPAYS correspondant au pays dans la table PAYS.

    J'ai 2 questions:

    1) Est-ce que je peux importer mon fichier Excel de façon qu'il reconnaisse les pays d'après la table PAYS ?

    2) En attendant, j'ai importé le fichier Excel en mettant les pays dans un champ PaysTexte. J'aimerais faire une requête mise-à-jour dans ma table de lieux, de façon à ce que PaysTexte soit reconnu d'après la table PAYS.

    Une seule des deux réponses me permettrait de résoudre mon problème, mais pour ma culture, j'aurais bien voulu avoir les deux réponses...

    Merci d'avance.
    O.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Oplaut,

    Citation Envoyé par Oplaut
    .../... j'ai importé le fichier Excel en mettant les pays dans un champ PaysTexte .../...
    ==> c'est un bon début !

    La seule méthode est, maintenant, de retrouver IDPAYS à partir du nom du pays figurant dans le fichier Excel importé (quand c'est possible). Dans la table Access T1, résultante de l'importation de ton fichier Excel :
    • ajoutes un champ IDPAYS (qui sera vide, pour l'instant) ;
    • crées une requête "mise à jour" liant T1 à PAYS, via T1.NomPays=PAYS.NomPays en stockant PAYS.IDPAYS dans T1.IDPAYS ;
    • traites manuellement les IDPAYS non trouvés à partir des noms ;
    • lances ton traitement d'intégration sur T1 avec les IDPAYS renseignés.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Bonjour Monsieur 35,

    Effectivement, c'est comme ça que j'ai procédé:

    J'ai créé un champ IdPays dans ma table de Sites provenant d'Excel.

    Et j'ai créé la requête mise à jour recherchant l'id du pays dans la table PAYS comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE PAYS INNER JOIN SITES ON PAYS.IDPAYS = SITES.Nompays SET SITES.IdPays = [PAYS].[IDPAYS]
    WHERE (((SITES.PaysTexte)=[PAYS].[NomPays]));
    Mais la requête ne rapportait rien, parce que dans la structure de la base, PAYS.IDPAYS est lié à SITES.NomPays, puisque le nom du pays doit forcément exister dans la liste des pays.

    J'ai donc enlevé la jonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE PAYS, SITES SET SITES.IdPays = [PAYS].[IDPAYS]
    WHERE (((SITES.PaysTexte)=[PAYS].[NomPays]));
    et j'ai bel et bien obtenu la liste numérique des pays (à l'exception de ceux qui avaient une erreur, comme tu l'avais prévu ).

    J'ai ensuite mis à jour le champ lié NomPays avec IdPays:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE SITES SET SITES.Nompays = [sites].[IdPays];
    Et il ne me reste plus qu'à supprimer IdPays.

    Merci beaucoup pour ton aide.

    O.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import Excel dans Access, problème date et heure
    Par Car0le dans le forum Access
    Réponses: 1
    Dernier message: 20/01/2014, 12h17
  2. [AC-2002] Import de donnée Excel dans Access : problème de valeur
    Par shakapouet dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/06/2012, 11h40
  3. Problème importation Excel vers Access
    Par vince9535z dans le forum VBA Access
    Réponses: 8
    Dernier message: 01/03/2012, 23h39
  4. [AC-2007] Problème d'import Excel vers Access
    Par christophe31 dans le forum VBA Access
    Réponses: 10
    Dernier message: 04/04/2010, 18h39
  5. problème d'importation excel dans access
    Par Badboy62cfp dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo