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

Langage SQL Discussion :

Mise à jour table Access en SQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Mise à jour table Access en SQL
    Bonjour !

    Mon problème est le suivant:
    Sous Access je souhaite mettre à jour une TableB avec les données d'une TableA pour les enregistrement présents dans les deux tables.

    J'ai ecrit la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE [TableB] SET [TableB].F1 = (SELECT TableA.F1 FROM TableA), [TableB].F2 = [(SELECT TableA.F2 FROM TableA), [TableB].F3 = (SELECT TableA.F3 FROM TableA), [TableB].F4 = (SELECT TableA.F4 FROM TableA), [TableB].F5 = (SELECT TableA.F5 FROM TableA), [TableB].F6 = (SELECT TableA.F6 FROM TableA), [TableB].F7 = (SELECT TableA.F7 FROM TableA), [TableB].F8 = (SELECT TableA.F8 FROM TableA), [TableB].F9 = (SELECT TableA.F9 FROM TableA), [TableB].F10 = (SELECT TableA.F10 FROM TableA), [TableB].F11 = (SELECT TableA.F11 FROM TableA), [TableB].F12 = (SELECT TableA.F12 FROM TableA), [TableB].F13 = (SELECT TableA.F13 FROM TableA), [TableB].F14 = (SELECT TableA.F14 FROM TableA), [TableB].F15 = (SELECT TableA.F15 FROM TableA), [TableB].F16 = (SELECT TableA.F16 FROM TableA), [TableB].F17 = (SELECT TableA.F17 FROM TableA), [TableB].F18 = (SELECT TableA.F18 FROM TableA)
    WHERE (((TableB.F11)=(SELECT TableA.F11 FROM TableA WHERE TableB.F11 = TableA.F11)));
    Lorsque je l'execute, j'ai le message suivant:
    " Le moteur de base de données ne peut pas trouver "Nom_De_Ma_Requete". Assurez vous que le nom de parametre ou d'alias est valide, qu'il ne comprend pas de caractere ou de ponctuation incorrect et qu'il n'est pas trop long ".

    Voila, donc je ne comprends pas pourquoi.
    Si quelqu'un à une idée ! Je suis preneur ! !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 105
    Points : 28 398
    Points
    28 398
    Par défaut
    Et comme ça, ça ne serait pas mieux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TableB 
    SET     F1 = TableA.F1
        ,   F2 = TableA.F2 
        ,   ...
    WHERE   TableB.F11 = TableA.F11
    ;

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci pour la réponse !
    Mais en fait ça ne résout pas le probleme. J'avais procédé comme ça au départ, et en fait, il me demande d'entrer la valeur de TableA.F1 etc etc.

    Là pour l'instant j'ai réecrit mon code en essayant de le simplifier (en me basant sur ton exemple), ce qui donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE TABLEB
    SET    F1 = (SELECT TABLEA.F1
                 FROM   TABLEA),
           F8 = (SELECT TABLEA.F8
                 FROM   TABLEA)
    WHERE  TABLEB.F11 = (SELECT TABLEA.F11
                         FROM   TABLEA);
    Mais là, toujours un message d'erreur à l'execution, cette fois c'est :
    "L'opération doit utiliser une requete qui peut être mise à jour"

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    La syntaxe de votre requête est correcte mais :

    1/ votre requête est absurde s'il peut exister plus d'une ligne dans TABLEA.
    A mon avis, vous voulez utiliser l'opérateur IN et non l'égalité...

    2/ vous n'avez pas besoin de préfixer la colonne F11 par TABLEB et il en est de même pour chaque colonne de vos sous-requêtes

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Le point 2 est mit à jour.
    Par contre pour le premier, je ne comprends pas bien.

    En fait, si les deux tables contiennent les colonnes 'N°', 'Nom', 'Prenom' par exemple,je voudrais que si il y a une ligne contenant le même 'N°' dans A et B, les autres champs de cette ligne 'Nom' et 'Prenom' soient mis à jour avec les valeur de la ligne de la tableA.

    Il y a donc effectivement plusieurs lignes dans ma table A, et je pensais que les mises à jour se seraient faites avec les données de la bonne ligne. Du coup je ne vois pas trop comment procéder, je n'ai pas saisi pour l'emploi du IN

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par KrSt94
    En fait, si les deux tables contiennent les colonnes 'N°', 'Nom', 'Prenom' par exemple,je voudrais que si il y a une ligne contenant le même 'N°' dans A et B, les autres champs de cette ligne 'Nom' et 'Prenom' soient mis à jour avec les valeur de la ligne de la tableA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    UPDATE TABLEB TB
    SET    NOM = (SELECT NOM
                  FROM   TABLEA TA
                  WHERE  TA.NUMERO = TB.NUMERO),
           PRENOM = (SELECT PRENOM
                     FROM   TABLE TA
                     WHERE  TA.NUMERO = TB.NUMERO),
    ... -- ainsi de suite pour chaque colonne à mettre à jour
    WHERE  EXISTS (SELECT *
                   FROM   TABLE TA
                   WHERE  TA.NUMERO = TB.NUMERO)
    Enfin lisez cet article : http://sql.developpez.com/sqlaz/sousrequetes/

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour cette réponse !
    Je comprend mon erreur...

    Citation Envoyé par Magnus
    Citation:
    KrSt94 a écrit :
    En fait, si les deux tables contiennent les colonnes 'N°', 'Nom', 'Prenom' par exemple,je voudrais que si il y a une ligne contenant le même 'N°' dans A et B, les autres champs de cette ligne 'Nom' et 'Prenom' soient mis à jour avec les valeur de la ligne de la tableA.

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    UPDATE TABLEB TB
    SET    NOM = (SELECT NOM
                  FROM   TABLEA TA
                  WHERE  TA.NUMERO = TB.NUMERO),
           PRENOM = (SELECT PRENOM
                     FROM   TABLE TA
                     WHERE  TA.NUMERO = TB.NUMERO),
    ... -- ainsi de suite pour chaque colonne à mettre à jour
    WHERE  EXISTS (SELECT *
                   FROM   TABLE TA
                   WHERE  TA.NUMERO = TB.NUMERO)
    Enfin lisez cet article : http://sql.developpez.com/sqlaz/sousrequetes/

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

Discussions similaires

  1. mise à jour table Access
    Par lokura dans le forum Access
    Réponses: 2
    Dernier message: 09/02/2012, 18h01
  2. [XL-2007] Mise à jour table access depuis Excel
    Par daimadoshi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/09/2011, 15h15
  3. [AC-2000] Mise à jour Table Access
    Par 30avril1989 dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/05/2010, 08h21
  4. Mise à jour Table Access
    Par 30avril1989 dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/04/2010, 11h01
  5. Mise à jour Tables access via Datagridview
    Par Apocalyptico dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/02/2010, 14h17

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