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

Bases de données Delphi Discussion :

mise à jour de quantité en stock


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut mise à jour de quantité en stock
    salut tout le monde,
    je suis débutante en delphi,et j'ai un probleme avec la mise à jour d'une table.
    j'ai 2 tables paradox:
    Produit(CodPrd,Desig,QteEnStk....)
    et Commande(NumCmd,CodPrd,DatCmd,QteLiv)
    je veux que: quand je rempli les champs de la commande(i.e distribution) et cliquer sur un boutton valider la quantité en stock de la table Produit se diminue selon la quantité livrée de la table Commande.

    voici le code:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    procedure TForm8.SpeedButton1Click(Sender: TObject);
    begin
    if(strtoint(edit2.Text)>strtoint(dbgrid1.Fields[4].Text))then
     begin
    showmessage('Stock insuffisant');
    exit;
    end
    else
    dm1.CommandeS.Active;
    dm1.CommandeS.Append;
    dm1.CommandeS.edit;
    dm1.CommandeS.FieldByName('NumServ').AsString:=DBLookupComboBox.Text;
    dm1.CommandeS.FieldByName('NumCmdS').AsString:=edit1.Text;
    dm1.CommandeS.FieldByName('DatCmdS').AsString:=maskedit1.Text;
    dm1.CommandeS.FieldByName('TypPrd').AsString:=combobox1.Text;
    dm1.CommandeS.FieldByName('Design').AsString:=dm1.Query1Design.Value;
    dm1.CommandeS.FieldByName('QteDems').AsString:=edit2.Text;
    dm1.CommandeS.FieldByName('QteLiv').AsString:=edit3.Text;
    dm1.CommandeS.Post;
    edit1.SetFocus;
    edit1.Clear;
    edit2.Clear;
    edit3.Clear;
    dbedit1.Clear;
    maskedit1.Clear;
    combobox1.Clear;
    dm1.Query1Design.Value;
     
    ///////////////////////{mise  a jour}//////////////////////////////
     
    dm1.produit.Active;
    dm1.produit.Append;
    dm1.produit.edit;
     while not(dm1.produit.Eof)do
     dm1.produit.First;
     if (dm1.Query1CodPrd.Value=dm1.produit.FieldValues['CodPrd'])then
     begin
     dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
     exit;
     end
     else
     dm1.produit.Next;
     end;
    mais la quantité en stock change pas.
    aidez moi svp

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bienvenue sur le forum,
    si j'ai bien compris, tu veux quand tu cliques sur un bouton pour livrer la commande des produits faire une mise à jour de la quantité du produit .
    dans ton code, il manque un POST,c'est pour ça que ça marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
    dm1.produit.post;
    a+

    NABIL74

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    bonsoir Nabil;
    merci pour ta réponse,
    meme avec l'ajout de l'instruction" dm1.produit.post" ça ne change rien

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Imene,dans ton code, tu effaces ce qu'il y a dans ton "edit3" avant la mise à jour.je t'explique:
    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
    19
    20
    21
    22
    23
    24
    dm1.CommandeS.Post;
    edit1.SetFocus;
    edit1.Clear;
    edit2.Clear;
    edit3.Clear;// ici tu effaces la valeur,donc lors du mise à jour,ton edit aura la valeur "0" donc pas de changement du champ"QteEnStk"
    dbedit1.Clear;
    maskedit1.Clear;
    combobox1.Clear;
    dm1.Query1Design.Value;
     
    ///////////////////////{mise  a jour}//////////////////////////////
     
    dm1.produit.Active;
    dm1.produit.Append;
    dm1.produit.edit;
     while not(dm1.produit.Eof)do
     dm1.produit.First;
     if (dm1.Query1CodPrd.Value=dm1.produit.FieldValues['CodPrd'])then
     begin
     dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
     exit;
     end
     else
     dm1.produit.Next;
    il faut mettre "edit3.Clear" après la mise à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .
    dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
    dm1.produit.post;
    edit3.Clear;//c''est ici qu'il faut le mettre
    .
    A+

    NABIl74

  5. #5
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut.
    salut.

    dm1.CommandeS.Append;
    dm1.CommandeS.edit;
    1* append :insert un nouveau enregistrement et le met en mode edition
    donc tu peut enlever :dm1.CommandeS.edit car append fait la afire.
    2*
    dm1.Query1Design.Value
    tu veut dire
    dm1.Query1[Design].Value, si oui :ou est le code de query1 ou bien que fait query1.
    3*
    while not(dm1.produit.Eof)do
    dm1.produit.First;
    je voit que tu teste toujour le premier enregistrement quand tu boucle .
    4*
    dm1.produit.Append;
    dm1.produit.edit;
    meme remarque que precedent.
    5* faite comme il a dit NABIL74.
    cordialement rec82.

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    comme t'as dis rec82,efface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dm1.CommandeS.Active;
    dm1.CommandeS.Append;
    dm1.CommandeS.edit;
    imene pourquoi tu fais une boucle lors de la mise à jour? =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while not(dm1.produit.Eof)do
     dm1.produit.First;
     if (dm1.Query1CodPrd.Value=dm1.produit.FieldValues['CodPrd'])then
     begin
     dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
     exit;
     end
     else
     dm1.produit.Next;
    comme ça tous les enregistrements du champ"QteEnStk"(de tous produits) vont être mise à jour. simplement tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dm1.produit.Edit;
    dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
    dm1.produit.post;
    edit3.Clear;
    .
    mais il faut se positionner sur le bon produit.

    A+

    NABIL74

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Rebonsoir ;


    dm1.Query1Design.Value
    tu veut dire
    dm1.Query1[Design].Value, si oui :ou est le code de query1 ou bien que fait query1.

    rec82, voilà le code de query1:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select CodPrd,Design,QteEnStk
    from Produit
    where TypPrd=:x

    ==> j'ai un combobox qui contient tous les types des produits,quand je clic sur un type,un dbgrid va afficher les produits correspodants à ce type avec les champs CodPrd,Design,QteEnStk .


    Citation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while not(dm1.produit.Eof)do
    dm1.produit.First;
    je voit que tu teste toujour le premier enregistrement quand tu boucle .

    oui c'est vrai,j'ai essayer de le mettre avant la boucle.


    imene pourquoi tu fais une boucle lors de la mise à jour?

    Nabil, la boucle c'est pour chercher dans la table Produit; le produit correspondant au produit selectioné dans le dbgrid.


    mais il faut se positionner sur le bon produit.

    je ne sais pas comment Nabil


    voici mon code aprés modification:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    procedure TForm8.SpeedButton1Click(Sender: TObject);
    begin
    if(strtoint(edit2.Text)>strtoint(dbgrid1.Fields[4].Text))then
     begin
    showmessage('Stock insuffisant');
    exit;
    end
    else
    dm1.CommandeS.Active;
    dm1.CommandeS.Append;
    dm1.CommandeS.edit;
    dm1.CommandeS.FieldByName('NumServ').AsString:=DBLookupComboBox.Text;
    dm1.CommandeS.FieldByName('NumCmdS').AsString:=edit1.Text;
    dm1.CommandeS.FieldByName('DatCmdS').AsString:=maskedit1.Text;
    dm1.CommandeS.FieldByName('TypPrd').AsString:=combobox1.Text;
    dm1.CommandeS.FieldByName('Design').AsString:=dm1.Query1Design.Value;
    dm1.CommandeS.FieldByName('QteDems').AsString:=edit2.Text;
    dm1.CommandeS.FieldByName('QteLiv').AsString:=edit3.Text;
    dm1.CommandeS.Post;
    dm1.Query1Design.Value;
     
    ///////////////////////{mise  a jour}//////////////////////////////
     
    dm1.produit.Active;
    dm1.produit.Append;
    dm1.produit.edit;
    dm1.produit.First;
     while not(dm1.produit.Eof)do
     if (dm1.Query1CodPrd.Value=dm1.produit.FieldValues['CodPrd'])then
     begin
     dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
     dm1.produit.Post;
     exit;
     end
     else
     dm1.produit.Next;
     end;
    mais un message d'erreur de :"Produit:l'ensemble de données n'est pas en mode édition ou insertion"

    que signifie ce message ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    1-pour rechercher le nom de ton produit, tu peux le faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var rech:string;
    begin
    rech:=DBEdit4.Text;//on recherche le nom du champ que contient "DBEdit4"
    DM1.Produit.First;
    while not DM1.Produit.Eof do begin
    if DM1.Produit.FieldValues['LE nom du Produit']=rech then begin
    break;//la recherche s''arrete
    end else
    DM1.Produit.Next;
    end;
    ou tu peux indexer (index secondaire) ton champ et par la suite le localiser avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DM1.Produits.FindNearest([Edit2.Text]);
    2-pour la mise à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ///////////////////////{mise a jour}//////////////////////////////
    dm1.Produit.FindNearest([Edit2.Text]);//edit2:contient le nom du champ de ton produit.
     
    dm1.produit.edit
    dm1.produit.FieldValues['QteEnStk']:= (dm1.produit.FieldValues['QteEnStk']- strtoint(edit3.Text));
    dm1.produit.Post;
    end;
    a+

    NABIl74

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Je n'ai pas lu tout les posts, mais c'est une erreur de vouloir modifier ton stock ! A un moment ou un autre, ton stock sera décrémenté plusieurs fois ou pas du tout et à l'arrivée, ce ne sera jamais juste .

    C'est au moment du test que tu devrais calculer la différence entre la quantité mise en stock et la quantité livrée (jointure sur les deux tables).

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    merci Nabil,c'est bon ça marche trés bien maintenant
    merci encore une fois à tous

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    de rien imene.
    en faite, tu as utilisé la solution de recherche ou FindNearest?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    j'ai utilisé la solution de la recherche nabil

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

Discussions similaires

  1. Mise à jour dans une proc stockée
    Par CharleLéo dans le forum Firebird
    Réponses: 2
    Dernier message: 25/12/2009, 23h36
  2. où sont stockés les mises à jour de windows
    Par yesil08 dans le forum Windows XP
    Réponses: 5
    Dernier message: 12/08/2007, 19h42
  3. Réponses: 2
    Dernier message: 05/12/2005, 16h39
  4. Procedure Stocké et mise à jour de ligne
    Par Andry dans le forum SQL
    Réponses: 2
    Dernier message: 26/11/2004, 10h22
  5. Procedure stockée de mise à jour
    Par Cambon dans le forum SQL
    Réponses: 4
    Dernier message: 26/01/2004, 20h35

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