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 :

[Access] Mise à jour de table depuis une autre


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut [Access] Mise à jour de table depuis une autre
    Bonjour à tous,

    Voilà, je vais vous exposer mon problème car ca fait des heures que je cherche après la bonne formule mais je ne trouve toujours pas !

    Voilà le problème :

    J'ai dans ma base de données (access) une table Produitplus et une table Produit, j'aimerais faire une mise a jour de ma table produit avec les champs de ma table produitplus.

    Par une mise à jour, j'entends :
    - Rajouter les produits que je n'aurais pas dans la table produit
    - Mettre a jour les champs des produits existant si nécessaire
    (Code_Prod=ArticleId, Lib_Prod=ArticleLibelleFR, Pix_Prod=ArtPrixBrut)

    Mes tables sont comme ceci :

    Produit :
    - Code_Prod (texte:30)
    - Lib_Prod (texte:50)
    - Prix_Prod (Monétaire)
    - Cadeau (Oui/Non)
    - FK_Id_TVA (num:Entier)

    Produitplus :
    - ArticleId (NuméroAuto:N°Replication)
    - ArticleLibelleFR (Texte:50)
    - ArtPrixBrut (Monétaire)

    J'avais pensé faire une 1ere requête d'INSERT INTO d'une table dans l'autre en vérifiant que le code n'y figurait pas et faire une 2ème requête UPDATE pour changer les champs des ligne dont les code sont identiques, mais malheureusement ni l'une ni l'autre ne fonctionne, j'ai des messages d'erreur pas vraiment très compréhensible.

    Auriez vous une idée de la marche à suivre ?

    Je vous remercie d'avance !


    Marcant.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Marcant
    malheureusement ni l'une ni l'autre ne fonctionne, j'ai des messages d'erreur pas vraiment très compréhensible.
    C'est vrai que sans savoir ce qui ne "ne fonctionne pas" et sans connaître les messages d'erreur, c'est beaucoup plus compréhensible...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    En effet, c'est plus facile avec les requêtes et les erreurs, mais c'était déjà dans le but de savoir si la méthode de faire une requetes INSERT puis une UPDATE pour faire une mise à jour était bonne.

    Voici le requete INSERT :

    INSERT INTO Produit ( Code_Prod, Lib_Prod, Prix_Prod )
    SELECT ArticleId, ArticleLibelleFR, ArtPrixBrut
    FROM Produitplus
    WHERE (Produitplus.ArticleID<>Produit.Code_Prod);

    Le problème c'est qu'il ne reconnait pas "Produit.Code_Produit", car il m'en demande une valeur. Hors justement, j'aimerais qu'il m'ajoute les lignes où l' Id Produit figure dans la table Produitplus et pas dans Produit.


    Voici ma deuxième requete :

    UPDATE Produit SET
    Lib_Prod = (SELECT ArticleLibelleFR FROM Produitplus WHERE Produitplus.ArticleId = Produit.Code_Prod),
    Prix_Prod = (SELECT ArtPrixBrut FROM Produitplus WHERE Produitplus.ArticleId = Produit.Code_Prod),
    FK_Id_TVA = 1;


    Là, j'essayais de lui demander de mettre a jour les champs :
    - Lib_Prod avec le champ ArticleLibelleFR où les Id des produits correspondent
    - Prix_Prod avec le champs ArtPrixBrut où les Id des produits correspondent
    - FK_Td_TVA toujours à 1

    L'erreur qu'il me donne pour ma 2ème requête c'est : L'opération doit utilise une requete qui doit peut être mis à jour.


    Voilà quoi, je pense que la 1ere requete doit être pas loin d'être juste mais la 2ème, j'ai du mal ;-).

    Qu'en pensez vous ?


    Marcant,
    Content de voir qu'on l'aide un peu.

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO Produit ( Code_Prod, Lib_Prod, Prix_Prod )
    SELECT ArticleId, ArticleLibelleFR, ArtPrixBrut
    FROM Produitplus pp
    WHERE NOT EXISTS (SELECT Null 
                      FROM Produit p 
                      WHERE pp.ArticleID = p.Code_Prod);

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Re,

    Ben après une nuit blanche d'essais et de recherche d'exemple, je pense être tombé sur 4 bonnes requêtes pour mettre à jour une table depuis une autre table dans une autre Bdd. Voici la solution que j'ai trouvé :

    1. Créer une table "tbltemp" (avec ce dont j'ai besoin (jointure 2 tables) dans la Bdd2.

    SELECT tbl1.Champs1, tbl1.champs2, tbl2.champs1
    INTO tbltemp FROM tbl1 INNER JOIN tbl2 ON (tbl1.champs1 = tbl2.champs1);


    2. Passer la table "tbltemp" d'une bdd (bdd2) à l'autre (bdd1).

    SELECT * INTO tbl IN 'Chemin de la Bdd2 + Bdd2.mdb'
    FROM Tbltemp


    3. Ajouter les champs de la Tbltemp qui ne sont pas encore dans le tb1

    INSERT INTO tb1 (champs1, champs2, champs3)
    SELECT DISTINCT tbltemp.champs1, tbltemp.champ2, tbltemp.champs3
    FROM tbltemp LEFT JOIN tbl ON (tbltemp.champs1=Tbl.champs1) AND
    (tbltemp.champs2=Tbl.champs2) AND
    (tbltemp.champs3=Tbl.champs3)
    WHERE (((Tbl.champs1) Is Null) And ((Tbl.champs2) Is Null) And ((Tbl.champs3) Is Null));


    4. Mettre à jour les champs existants

    UPDATE tbl1 INNER JOIN tbltemps ON tbl.champs1=tbltemp.champs1 SET tbl.champs2 = tbltemp.champs2, tbl.champs3 = tbltemp.champs3, tbl.champs4 = 1;


    Voilà... ca a l'air de donner plutot de bonnes choses, reste juste qu'il faut effacer la tbltemp dès qu'elle est trasférée d'une table a l'autre sans quoi la 1ere requete plante car la table est déjà existante.

    En tout cas grand merci à Médiat pour son aide et son inspiration.


    Marcant,
    Content d'arriver à quelque chose.

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

Discussions similaires

  1. Mettre à jour un TextView depuis une autre classe
    Par thesmogs dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 21/07/2013, 22h33
  2. Mettre à jour une table depuis une autre
    Par tiboAcces dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/07/2012, 09h01
  3. mise a jour de table sur une autre base de donnée
    Par didinedz dans le forum Réplications
    Réponses: 2
    Dernier message: 07/06/2012, 17h06
  4. Mettre à jour une table depuis une autre
    Par snubi dans le forum Access
    Réponses: 1
    Dernier message: 20/04/2006, 19h28
  5. Mettre à jour une table depuis une autre
    Par rsc dans le forum SQL
    Réponses: 4
    Dernier message: 09/07/2004, 10h08

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