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 :

Requête SQL de mise à jour


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut Requête SQL de mise à jour
    Bonjour,
    J'essaie de dupliquer les colonnes de la table Table1 dans la table Table2.
    Au début, j'avais fait une requête SQL d'insertion, à chaque fois que je rajoutais une ligne dans la table Table1, je voyais qu'après l'exécution de la requête SQL , on dupliquait l'intégralité de la table Table1 dans la table Table2
    Bref, il y avait des doublons dans la table Table2.

    J'ai donc voulu écrire une requête SQL de mise à jour me permettant de dupliquer la table Table1 dans la Table2, pourtant, malgré mes nombreux essais, cela n'a pas marché..
    Pouvez vous me conseiller une requête SQL de mise à jour SVP? ( Tout code VB sera bienvenu aussi )
    Précision : mes tables n'ont pas de clés primaires.

    Merci d'avance.



    Javais fait :

    Essai1 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Update table2
    set 
    client=table1.client
    montant=table1.montant;
    Essai2:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Update Table2 INNER JOIN Table1 ON Table2.client=Table1.Client
    SET
    Table2.client=Table1.client
    Table2.montant=Table1.montant;

    Essai3:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Update Table2
    SET
    Table2.client=(Select client from Table1) ;
    Table2.montant=(Select montant from Table1);

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 209
    Points
    209
    Par défaut
    bonjour,
    je n'ai pas très bien compris se que tu cherches à faire,
    tu as essayé avec un
    dans ta requête.. ?

    Si tu ne mets pas de where tu vas modifier tout les enregistrements, alors que si tu mets une condition tu peux choisir ceux que tu veux modifier et donc tu n'auras pas la totalité de ta table qui sera modifié

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    Salut =)
    Je veux mettre le contenu d'une table Table1 dans une autre table Table2.
    j'ai aussi mis la condition avec "where", pourtant, ça ne marche pas
    J'exécute la requête et ça me met le message suivant: " O mises à jours".

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Sans champs unique c'est pas cool...
    Une solution que j'utilise frequemment.
    rajouter un champ case à cocher dans TB1 (valeur par defaut 'non')
    faire mise à jour de tous les champs TB1 case à cocher 'oui'
    Quant tu rajoute un enregistrement sur TB1, par défaut il est à 'non'
    Faire requete ajout de TB1 sur TB2 des enregistrements à 'non'
    Faire mise à jour de la table TB1 cache à cocher oui

    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    Salut =)
    En fait, le problème est le suivant : Toute requête d'ajout met à chaque fois toutes les données de la table source dans la table destination. Du coup, plusieurs lignes de la table Source apparaissent plusieurs fois dans la table destination.
    Sinon, je vais revoir la condition "where" avec la case à cocher que j'avais faite.
    Merci pour ta réponse

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 123
    Points
    123
    Par défaut
    Oui mais dans ma solution tu n'ajoutes que les nouveaux enregistrements de TB1: CAC a NON dans TB2 et apres tu mets à jour TB1 des enregistrements qui sont NON à OUI de façon a ne pas les integrer une deuxieme fois puisque tu ne prends que ceux qui sont NON

    Capito ?

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    j'ai fait, pour la mise à jour :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE Table2 
    SET
    Table2.client = Table1.client
    Table2.montant=Table1.montant
    WHERE Table1.archiver="oui";
    // j'ai utilisé une case à cocher

    Pourtant, j'exécute cette requête, et j'ai toujours "0 mise à jour " dans ma table Table2.
    Désespérément, je m'efforce de trouver une solution.
    Qui aurait une solution svp?
    merci d'avance=)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Points : 51
    Points
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Dim oRst1,oRst2 as DAO.Recordset
    Dim oDb as DAO.Database
    Set oRst2=oDb.openrecordset("table2",dbopentable)
    Set oRst1=oDb.openrecordset("Select client, montant from table1",dbopendynaset)
    while not (oRst1.EOF)
      oRst2.Addnew
      oRst2.fields("client").value=oRst1.fields("client").value
      oRst2.fields("montant").value=oRst1.fields("montant").value
      oRst2.update
      oRst1.movenext
    wend
    oRst1.close
    oRst2.close
    odb.close
    set oRst1=nothing
    set oRst2=nothing
    set odb=nothing
    tu peux essayer un truc comme ca, chuis pas sur que ca marche mais c un peu le principe
    Un chat avec des moufles n'attrape pas de souris.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par ricounet
    Oui mais dans ma solution tu n'ajoutes que les nouveaux enregistrements de TB1: CAC a NON dans TB2 et apres tu mets à jour TB1 des enregistrements qui sont NON à OUI de façon a ne pas les integrer une deuxieme fois puisque tu ne prends que ceux qui sont NON

    Capito ?

    A+
    Ricounet, oui mon cher collaborateur intellectuel , =)
    j'ai compris ce que tu veux dire. Enfin, du compte, on fait plusieurs requêtes.

    Cependant, on ne saura jamais à partir de la table Table1 les lignes qu'on a mises dans la table Table2.

    Merci pour tes réponses.
    A plus

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par bizu31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Dim oRst1,oRst2 as DAO.Recordset
    Dim oDb as DAO.Database
    Set oRst2=oDb.openrecordset("table2",dbopentable)
    Set oRst1=oDb.openrecordset("Select client, montant from table1",dbopendynaset)
    while not (oRst1.EOF)
      oRst2.Addnew
      oRst2.fields("client").value=oRst1.fields("client").value
      oRst2.fields("montant").value=oRst1.fields("montant").value
      oRst2.update
      oRst1.movenext
    wend
    oRst1.close
    oRst2.close
    odb.close
    set oRst1=nothing
    set oRst2=nothing
    set odb=nothing
    tu peux essayer un truc comme ca, chuis pas sur que ca marche mais c un peu le principe
    Bizou31,
    Merci pour ta réponse. Je vais essayer ce code. Mais vu mes compétences en VB, ça sera délicat .
    A plus =)

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO monautretable
    SELECT matable.*
    FROM matable LEFT JOIN monautretable ON matable.monchamp = monautretable.monchamp
    WHERE (((monautretable.monchamp) Is Null));
    Elle est pas belle la vie ?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut
    Bonjour,
    Merci beacoup Random, ta requête est magnifique. Elle m'a permis de résoudre mon problème.
    A plus

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    En fait une requete de non correspondance entre TB1 et TB2, Ok.
    Par contre apparemment tu fais tes liens sur :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Update table2
    set 
    client=table1.client
    montant=table1.montant;

    et le jour ou tu auras pour le même client un même montant (deux commandes indentiques)il ne te rajoutera pas un nouvel enregistrement dans TB2, donc pas de facture .
    A+

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Points : 59
    Points
    59
    Par défaut ma joie fût éphémère
    Bonjour,
    Ricounet, je vois bien ce que tu veux, dire, ta remarque est juste.

    La requête de Random :


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO monautretable
    SELECT matable.*
    FROM matable LEFT JOIN monautretable ON matable.monchamp = monautretable.monchamp
    WHERE (((monautretable.monchamp) Is Null));

    Elle permet bien de mettre la nouvelle ligne de la table "matable" dans la table " monautretable", cependant, dès qu'on change une valeur dans la table "matable", elle ne prend pas en compte ce changement. Du coup, le contenu de la table "monautretable" reste le même même si on change toutes les lignes de "matable".

    j'aimerai bien faire une mise à jour de la table "monautretable" à partir de la table "matable". Pourtant, je n'y arrive pas
    // je veux dupliquer les données de la table "matable" dans la table " monautretable". Au cas où il y aura des modifications dans la table "matable" , je veux que "monautretable" contienne les nouvelles données de la table "matable". voilà chers docteurs, je vous ai décrit mes terribles souffrances et angoisses; j'attends de vous 1 jolie ordonnance =)

    A plus

Discussions similaires

  1. [AC-2003] Requête SQL pour Mise à jour de champs dans un formulaire suite à une saisie
    Par sunshine44 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/01/2010, 16h25
  2. Requête SQL de mise à jour
    Par viper87 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/01/2010, 19h37
  3. Réponses: 9
    Dernier message: 03/05/2007, 15h09
  4. requête Genbank et mise à jour
    Par Jasmine80 dans le forum Bioinformatique
    Réponses: 5
    Dernier message: 06/02/2007, 15h07
  5. Problème SQL SAGE Mise à jour
    Par yancimer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/10/2006, 21h35

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