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

 Delphi Discussion :

Update type 'opération d'addition dans un champ'


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de magicstar
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 84
    Points
    84
    Par défaut Update type 'opération d'addition dans un champ'
    Bonjour,

    Je n'arrive pas à faire une requête de mise à jour pour modifier la 'quantité d' article en stock' de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'UPDATE article SET qte_s = qte_s +  SELECT qte_a FROM achat WHERE
    
     code_p.article= code_p.achat'
    J'utilise Access comme SGBD.

    Merci beaucoup.

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    ben c'est normal, le SQL ne supporte pas INSERT et UPDATE dans la même expression. faut faire ça en deux temps

    1. SELECT pour avoir le groupe d'enregistrement qui répondent à ton (tes) critère(s)
    2. UPDATE pour la mise à jour; si le nombre d'enregistrements est plus qu'un ne pas oublier de mettre ça dans une boucle.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Ce qui est plus étrange c'est "code_p" ça ne devrait pas être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    article.code_p = achat.code_p
    Ensuite, cela dépend du SGBD, ACCESS c'est assez pauve en fonctionnalité SQL, on peut aussi simplifié ... ceci fonctionne en MySQL, peut-être aussi en ACCESS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article, achat 
    SET article.qte_s = article.qte_s + achat.qte_a 
    WHERE article.code_p = achat.code_p

  4. #4
    Membre régulier Avatar de magicstar
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 84
    Points
    84
    Par défaut
    Bonjour,
    Pour le code d'hier, je savais qu’il était erroné je l’avais mis pour illustrer mon idée anarchique,
    Citation Envoyé par ShaiLeTroll Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article, achat 
    SET article.qte_s = article.qte_s + achat.qte_a 
    WHERE article.code_p = achat.code_p
    Malheureusement, ce code ne marche pas sur access merci beaucoup Troll pour ta contribution.

    SELECT pour avoir le groupe d'enregistrement qui répondent à ton (tes) critère(s)
    UPDATE pour la mise à jour; si le nombre d'enregistrements est plus qu'un ne pas oublier de mettre ça dans une boucle.
    Merci Just-Soft.
    Je ne sais pas comment enregistrer les valeurs d’une requête et pour ça je dois enregistrer la quantité d’un article plus son code, pour faire la mise à jour par rapport au code. Peux tu stp me donnée plus de détail sur cet opération. à part ça j’ai fait autre chose :
    Comme j’ai les mêmes informations sur un dbgrid j’ai pensé à faire la mise à jour à partir du contenu des colonnes de mon dbgrid, voici ce que j’ai essayé de bricoler :
    ADOQuery4.SQL.Clear;
    ADOQuery4.SQL.Add('update produit set qte_s = qte_s +'+quotedstr(DataSource2.DataSet.FieldByName('qte_a').Value) 'where code_p ='+quotedstr(DataSource2.DataSet.FieldByName('code_p').Value));
    ADOQuery4.ExecSQL;
    Est ce que ça devrait marcher un code pareil sans boucle? pour celui là l'erreur est
    missing operator or semicolon
    Merci

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Euh, là, c'est grave, faudrait au moins que tu sache manipuler des chaines avant de vouloir faire de la Base de Données, tu n'as même pas chercher 5 secondes avant de poster ...

    ADOQuery4.SQL.Add('update produit set qte_s = qte_s +'+quotedstr(DataSource2.DataSet.FieldByName('qte_a').Value) + 'where code_p ='+quotedstr(DataSource2.DataSet.FieldByName('code_p').Value));
    Evite les concaténations pour ce genre de chose, mieux vaut utiliser des Paramètres, voir ParamByName ... tu as plein d'exemple sur le forum ...

    essaye aussi cette variante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + achat.qte_a

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + achat.qte_a
    Je pense pas que cela fonctionne.

    Il faudrait le faire en 2 étapes
    1) requete group by sur achat.qte_a (sans group by lolol)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Sum(Achat.Qte_a) as totalQte From Achat Where Achat.Code_p = 'ton_code_article_en_cours'
    2) requete update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update Article Set Article.code_p = 'TotalQte' Where Article.code_p = 'ton_code_article_en_cours'
    'ton_code_article_en_cours' ==> soit tu boucle sur la liste des articles, soit tu donne un article
    'TotalQte' => fait attention c'est un nombre

    by

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    ça vous arrive de consulter les cours de Développez ?
    Le Langage SQL appliqué à Access par Alexandre le Grand

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ça vous arrive de consulter les cours de Développez ?
    Le Langage SQL appliqué à Access par Alexandre le Grand
    Non seulement, je lis mais je pratique tous les jours et surtout je test.

    Se ne peux pas marché car le calcul se fait avec un champ de la table inner.
    si tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + 3
    là ça marche

    Mais si tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + achat.qte_a
    cela ne fonctione pas.

    en fai tla requete s'execute, mais il n'y a pas de modificition du champs achat.qte_s.


  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 638
    Points : 25 357
    Points
    25 357
    Par défaut
    Heureusement qu'il n'y a pas de modificition du champs achat.qte_s (?) ... puisque l'on veut modifier article.qte_s ... lol, je joue sur les mots, c'est une coquille ...

    Si cela ne fonctionne pas, c'est vraiement de la merde ACCESS, lorsque l'on a un MySQL gratuit (voir GPL et Licence contagieuse, sinon c'est quand même payant pour les serveurs) nettement plus performant !

  10. #10
    Membre régulier Avatar de magicstar
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Euh, là, c'est grave, faudrait au moins que tu sache manipuler des chaines avant de vouloir faire de la Base de Données, tu n'as même pas chercher 5 secondes avant de poster ...
    Si j'ai fait des recherches!!
    Mais vous avez raison j'ai zappé une partie des cours delphi pour travailler enfin avec les bases de données, j'ignorais combiens ils ont de l'importance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + achat.qte_a
    Celui là fonctionne Merci ShaiLeTroll

    Citation Envoyé par BuzzLeclaire
    cela ne fonctione pas.

    en fai tla requete s'execute, mais il n'y a pas de modificition du champs achat.qte_s.
    T'es sûr car pour moi je les ai ces modifcations! je vais encore tester!

  11. #11
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par magicstar Voir le message
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE article
    INNER JOIN  achat ON (article.code_p = achat.code_p)
    SET article.qte_s = article.qte_s + achat.qte_a
    Celui là fonctionne Merci ShaiLeTroll
    ShailLeTroll Le BuzzLeclaire

    Non mais sans rire ? j'ai testé sur access 97 et toi ?

  12. #12
    Membre régulier Avatar de magicstar
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    ShailLeTroll Le BuzzLeclaire

    Non mais sans rire ? j'ai testé sur access 97 et toi ?


    Access 2007, j'ai testé 100 fois et ça fonctionne

    Merci a tous et bonne journée

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

Discussions similaires

  1. Mettre type de données monetaire dans le champ d'une requete
    Par emirov dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 02/05/2008, 14h53
  2. Addition de plusieurs champs dans champ indépendant
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 11/11/2005, 09h37
  3. afficher du texte dans le champ de saisie de type file
    Par MANU_2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 14h59
  4. insérer un 'NULL' dans un champ de type DATE
    Par 84mickael dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/06/2005, 09h23
  5. Valeur par defaut 'True' dans un champ de type bit
    Par Mouse dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2003, 15h26

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