{Access} rquette de mise a jour

abdo78 -  
 abdo78 -
Bonjour,
j ai deux tableaux ; agent et nouveau matricule
dans le 2eme tableau ; il y 2 champs : matricule et nvmatricule
je veux faire une requette de mise ajour pour changer les matricules dans le tableau agent par les nouveaux matricules qui sont dans le tableau nouveau matricule .merci de m'aider c urgent.
Configuration: Windows XP
Firefox 3.5.6

20 réponses

Résumé de la discussion

Problématique centrale : réaliser une requête de mise à jour qui remplace les matricules de la table Agent par les nvmatricule issus d'une deuxième table, dans un contexte Access.
Plusieurs réponses préconisent une requête de mise à jour associant les deux tables soit par une sous-requête soit par une jointure, en précisant le nom des champs lorsque les noms se chevauchent.
Des réponses soulignent aussi les risques de doublons et de clés primaires lors du remplacement, recommandant éventuellement d'assurer une liaison unique et de tester avec des index adaptés.
En pratique, certaines approches évoquent l'utilisation d'une sous-requête corrélée ou d'un update avec jointure dans Access, avec des exemples de code et des précautions liées aux noms de tables.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. moiced59 Messages postés 1161 Statut Membre 60
     
    bonjour

    alors en sql:

    update agent set matricule = (select nvmatricule from nouveau matricule where "la il te faut mettre 2 champ egaux pour que la liaison se fasse")

    du genre update agent set matricule = (select nvmatricule from nouveau matricule where prenom.matricule = prenom.nvmatricule)
    0
    1. abdo78
       
      merci de votre aide
      j ai fais une requete qui lit les tables agent et nouveaumat et une sous requete de mise a jour puis j ai choisi mode sql pour ecrire le code. j ai ecris ce code: update agent set matricule =(select nvmatricule from nouveaumat where agent.matricule=nouveaumat.matricule) mais il m affiche le message suivant ; l operation doit utliser une requete qui doit etre mise a jour . erreur 3073
      merci
      0
    2. abdo78
       
      Merci de votre aide
      j ai fais une requete qui lit les tables agent et nouveaumat et une sous requete de mise a jour puis j ai choisi mode sql pour ecrire le code. j ai ecris ce code: update agent set matricule =(select nvmatricule from nouveaumat where agent.matricule=nouveaumat.matricule) mais il m affiche le message suivant ; l operation doit utliser une requete qui doit etre mise a jour . erreur 3073
      merci
      0
  2. moderno31 Messages postés 900 Statut Membre 92
     
    Je suis d'accord avec ce qui a été dit précédemment.
    Sinon via l'assistant requete mise à jour c'est possible aussi
    0
  3. moiced59 Messages postés 1161 Statut Membre 60
     
    bonjour

    le probleme est que tu met a jour un champ et que tut e sert de celui ds ta sous requete!!!

    tu met a jour le matricule ok mais tu dois faire la relation entre les 2 table avec un autre champ unique
    0
    1. abdo78
       
      merci de votre aide

      svp , si vous pouvez m' expliquer comment faire dés le debut de l' operation , car j ai fait la requtte avec d' autre champ mais le meme message s'affiche. merci
      0
  4. moiced59 Messages postés 1161 Statut Membre 60
     
    dis nous quel sont exactement tout tes champs de chaque table et les champ egaux et le champ a mettre a jour par rapport au quel
    0
    1. abdo78
       
      merci encor
      les champs de table agent : service;matricule;nom;adresse;pays;cnss;cin;dentree
      les champs de table nouveaumat: matricule;nvmatricule;nom;cnss;cin;dentree

      je veux changer le champ matricule du table agent par le champ nvmatricule du table nouveaumat

      l' objectif est de changer les matricules des agents sans tout resaisir leurs fiches.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. moiced59 Messages postés 1161 Statut Membre 60
     
    re

    alors:
    si ton champ nom des 2 table represente la meme chose et que tu na pas 2 fois le meme nom tu peux faire ca:

    update agent set matricule = (select nvmatricule from nouveaumat where nom.agent = nom.nouveaumat)

    si cela ne vas pas hesite pas
    0
    1. abdo78
       
      maerci

      j ai ecrit l'insruction mais meme message
      0
  7. moiced59 Messages postés 1161 Statut Membre 60
     
    UPDATE matricule1, matricule2 SET matricule1.matricule = [matricule2].[nouveaumatricule]
    WHERE (((matricule2.nom)=[matricule1].[nom]));

    matricule1 = 1ere table a mettre a jour

    matricule2 = 2eme table ou les bonne donné sont

    et le champ nom qui est ds les 2 table me sert a faire la relation cette requette fonctionne chez moi
    0
    1. abdo78
       
      merci

      il m' afiiche le message suivant:
      microsoft access n'arrive pas a mettre a jour tout les enregistrements de la requete mise a jour
      microsoft access n'a pas mis a jour 0 champ(s) a cause d'un echec de conversion de type,1 enregistrement a couse de la violation de clé, 0 enregistrement a cause de violation de verrou et 0 enregistrement a cause de violation de la regle de validation.
      0
    2. abdo78
       
      Merci

      il m' afiiche le message suivant:
      microsoft access n'arrive pas a mettre a jour tout les enregistrements de la requete mise a jour
      microsoft access n'a pas mis a jour 0 champ(s) a cause d'un echec de conversion de type,1 enregistrement a couse de la violation de clé, 0 enregistrement a cause de violation de verrou et 0 enregistrement a cause de violation de la regle de validation.
      0
  8. moiced59 Messages postés 1161 Statut Membre 60
     
    t champ on ete mis a jour?
    0
    1. abdo78
       
      seulement 560 de 1291 enrgistrements qui a ete changer
      0
    2. abdo78
       
      Seulement 560 de 1291 enrgistrements qui a ete changer
      0
  9. moiced59 Messages postés 1161 Statut Membre 60
     
    ce que tu peux faire c :

    requete de tout a l'heure

    UPDATE matricule1, matricule2 SET matricule1.matricule = [matricule2].[nouveaumatricule]
    WHERE (((matricule2.nom)=[matricule1].[nom]));

    a la place des nom de la fin met t matricule de base

    UPDATE matricule1, matricule2 SET matricule1.matricule = [matricule2].[nouveaumatricule]
    WHERE (((matricule2.matricule)=[matricule1].[matricule]));
    0
  10. moiced59 Messages postés 1161 Statut Membre 60
     
    re
    ce que tu peux faire c :

    requete de tout a l'heure

    UPDATE matricule1, matricule2 SET matricule1.matricule = [matricule2].[nouveaumatricule]
    WHERE (((matricule2.nom)=[matricule1].[nom]));

    a la place des nom de la fin met t matricule de base

    UPDATE matricule1, matricule2 SET matricule1.matricule = [matricule2].[nouveaumatricule]
    WHERE (((matricule2.matricule)=[matricule1].[matricule]));
    0
    1. abdo78
       
      merci

      le problme que j ai c que :certains nvmatrucule existe deja dans la table agent mais pour d autres agent exp:

      ancien matr nvmatricule

      1300 1301
      1301 1302
      1302 1303
      1303 1304
      lorsque il change 1300 avec 1301 il se retrouve avec 2 matricule ayant 1301 et il les changes avec 1302 ainsi de suite , la requete qu'on a fait fonctionne lorsque les nouveaux matricule n existe pas dans la tabla agent.

      j 'espere qu tu a compris ce que je veux dire .
      0
    2. abdo78
       
      Merci

      le problme que j ai c que :certains nvmatrucule existe deja dans la table agent mais pour d autres agent exp:

      ancien matr nvmatricule

      1300 1301
      1301 1302
      1302 1303
      1303 1304
      lorsque il change 1300 avec 1301 il se retrouve avec 2 matricule ayant 1301 et il les changes avec 1302 ainsi de suite , la requete qu'on a fait fonctionne lorsque les nouveaux matricule n existe pas dans la tabla agent.

      j 'espere qu tu a compris ce que je veux dire .
      0
  11. moiced59 Messages postés 1161 Statut Membre 60
     
    bonjour

    peux tu copier ta requete stp

    ds ta requete nvmatricule ne doit apparaitre que pr la mise a jour

    une fois que la mise a jour est effectué access ne regarde plus l enregistrement c bizarre ce que tu me dis!!!
    0
  12. moiced59 Messages postés 1161 Statut Membre 60
     
    re
    ton champ matricule est il une clé primaire?
    0
  13. moiced59 Messages postés 1161 Statut Membre 60
     
    re
    je viens de faire des essai je confirme c du au fait que t champ matricule soit des clé primaire
    0
    1. abdo78
       
      bonjour
      oui le champ matricule est la cle primaire
      0
    2. abdo78
       
      Bonjour
      oui le champ matricule est la cle primaire
      0
  14. moiced59 Messages postés 1161 Statut Membre 60
     
    Csupprime ta clé primaire sur les 2 table execute la requete et remet la clé!!!
    0
    1. abdo78
       
      c ce que j ai fait et la requete ca marche . merci infiniment de votre aide je vous souhaite une année plein de succés . merci encor
      0
  15. moiced59 Messages postés 1161 Statut Membre 60
     
    bonne fete de fin d'année a bientot sur CCM
    0
    1. abdo78
       
      rebonjour
      je veux faire une requete de supression . suprimer les enregistrements des agents dont les matricule sont differente des matricules quis existe dans la table nvmatricuel dans le champs matricule .
      l objectif est de supprimer dans le fichier agent tous les matricules qui sont partis et de de laisser que les
      matricules qui sont en travail actuellement .
      j ai essayer avec cette requete :DELETE agent.*, NouveauMat.Matricule
      FROM agent, NouveauMat
      WHERE (((NouveauMat.Matricule)<>[agent].[matricule]));
      mais le message suivant s'affiche : impossible de supprimer les tables specifié.

      merci de votre aide , desole du derangement.
      0
  16. Jacadit24000 Messages postés 71 Statut Membre 11
     
    Je suppose que les tableaux sont des tables dans Access.

    1ère table Nom : Agent / champs : Agent et Matricule
    2ème table Nom : Matricule / Champs : Matricule et Nvmatricule

    Création d'une table de MAJ Table :
    Mettre les 2 tables
    Mettre dans Champ : Matricule
    Mettre dans Table : Agent
    Mettre dans Mise à jour : [Nvmatricule]
    Mettre dans Critères : Comme [Matricule]![Matricule] comparaison de Matricule de la Table Agent avec la Table Matricule. Comme ces 2 champs ont le meme nom, il faut préciser le nom de la table.
    En lançant cette requête le champ Matricule de la Table Agent sera mis à jour par le champ Nvmatricule de la table Matricule.
    J'espère avoir été clair et que ma réponse correspond bien à votre demande.
    PS : Evidemment, il ne faut pas que les Nvmatricule de la Table Matricule correspondent à des Matricules de la Table Agent, cela ferait des Doublons et donc si le n° matricule est une clé sans doublons cela ne marche pas. Il faut surement mettre le champ Matricule de la Table Agent indexé avec doublons avant de lancer la Requête.
    0
    1. abdo78
       
      baonjour
      j supprimer la cle primaire du table agent et la requete ca marche.

      autre sujet:

      je veux faire une requete de supression . suprimer les enregistrements des agents dont les matricule sont differente des matricules quis existe dans la table nvmatricuel dans le champs matricule .
      l objectif est de supprimer dans le fichier agent tous les matricules qui sont partis et de de laisser que les
      matricules qui sont en travail actuellement .
      j ai essayer avec cette requete :DELETE agent.*, NouveauMat.Matricule
      FROM agent, NouveauMat
      WHERE (((NouveauMat.Matricule)<>[agent].[matricule]));
      mais le message suivant s'affiche : impossible de supprimer les tables specifié.
      0
  17. moiced59 Messages postés 1161 Statut Membre 60
     
    re

    tu ne peux pas mettre un * derriere le nom de la table qd tu as des critere il te faut les decomposer!!!
    0
  18. moiced59 Messages postés 1161 Statut Membre 60
     
    voici la solution a ton probleme:

    DELETE *
    FROM agent
    WHERE matricule IN (SELECT nouveaumatricule FROM nouveaumat WHERE nvmatricule<>matricule1.matricule)

    a toi de modifier les nom j 'ai essayé de te les mettre mais verifie qd meme
    0
    1. abdo78
       
      rebonjour

      l' objectif de la requete est de conserver dans la table agent seulement les agents qui sont ont travail pour cela je dois supprimer tout les agents qui sont partis.

      dans la table nouveaumat , il ya deux champs matricule (les matricules qui sont en travail) et nvmatricule
      1) je dois utiliser ce table pour supprimer dans la table agent les agents qui sont partis en se basant sur le champ matricule de la table nouveaumat.

      apres je doit fair la requte de mise ajour de ces matricules par les nvmatricules , l'operation qu on réglé.


      cette requte '(DELETE *
      FROM agent
      WHERE matricule IN (SELECT nouveaumatricule FROM nouveaumat WHERE nvmatricule<>matricule1.matricule) ) me done 0 enregistrement a supprimer.
      0
  19. moiced59 Messages postés 1161 Statut Membre 60
     
    ALORS :
    DELETE *
    FROM agent
    WHERE matricule IN (SELECT matricule FROM nouveaumat WHERE matricule1.matricule <>nouveaumat.matricule)
    0
    1. abdo78
       
      rebonjour
      il m'affiche : vous allez supprimer 0 lignes de la table spécifié
      0
  20. moiced59 Messages postés 1161 Statut Membre 60
     
    DELETE *
    FROM agent
    WHERE matricule not IN (SELECT matricule FROM nouveaumat WHERE matricule1.matricule <>nouveaumat.matricule)
    0
    1. abdo78
       
      rebonjour
      il m'affiche 239 lignes a supprimer , c ce qui existe dans la table agent , c a dir tous les enregistremnts de la table. alors que elle ne doit suprimer que 96 enregistrements; c a d que 143 matricule qui existe dans la table nouveaumat qu elle doit garder.
      0
    2. abdo78
       
      voila la requete :
      delete * from agent where matricule not in ( select matricule from nouveaumat where agent.matricule=nouveaumat.matricule)
      merci de votre aide
      si vous permetez , puisje vous demandez de m envoyé ton email.
      merci encor.
      0
    3. abdo78
       
      bonjour

      j ai un programe de comptabilité
      quant je fais calcule cout il affiche message erreur suivant :erreur d'execution 94 utilisation non autorisé de null
      le programe est sous vb
      la base est sous access
      merci ed votre aide
      0
  21. moiced59 Messages postés 1161 Statut Membre 60
     
    oula!!!!!!!!

    delete * from agent where agent.matricule not in (select matricule from nouveaumat)

    voila je pense que c le resultat que tu recherche

    la tu supprime tt les enregistrement de la table agent ou le matricule n'existe pas ds la table nouveaumat sur le champ matricule
    0
    1. abdo78
       
      bonjour

      je voulais seulement vous remercier de votre aide

      mon email : abdelkader78hotmail.com
      0