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 :

Impossible de metre à jour les Quantité existante en Stock


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Impossible de metre à jour les Quantité existante en Stock
    j'ai une fiche pour la saisie des entrées de quelques produits,le but est d'enregistrer le produit entré ET de
    tester si le produit entré existe en stock il faudra mettre à jour la quantité du produit.
    pour cela j'ai utilisé le code suivant:



    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    procedure TFormStock.BitBtn2Click(Sender: TObject);
    var  i:integer;
         Quantite:string;
     
    begin
    if messagedlg('Êtes vous sûr de vouloir sauvegarder cet enregistrement?',mtconfirmation,[mbyes, mbno],0)=mryes then
     
    if combobox3.text='' then
        begin
        showmessage('Veuillez entrer le Code produit!');
        combobox3.SetFocus;
        end
     
    else
     if Maskedit4.text='' then
      begin
      showmessage('Veuillez entrer le Code Stock!');
      Maskedit4.SetFocus;
      end
     
     else if Maskedit1.text='' then
              begin
              showmessage('Veuillez entrer la date d''Entrée!');
              Maskedit1.SetFocus;
              end
     
          else if edit8.text='' then
            begin
            showmessage('Veuillez entrer le poids unitaire!');
            edit8.SetFocus;
            end
     
           else if  edit9.text='' then
     
                    begin           
                    showmessage('Veuillez entrer le nombre d''unités!');    
                    edit9.SetFocus; 
                   end
     
                else if edit10.text='' then
                     begin
                      showmessage('Veuillez entrer le poids Total!');
                      edit10.setfocus;
                    end
      else
       begin
     
       table2.insert;
       table2.fieldbyname('Code_Produit').asstring:=Combobox3.text;
       table2.fieldbyname('Code_Stock').asstring:=MaskEdit4.text;
       table2.fieldbyname('Date_Entrée').asstring:=MaskEdit1.text;
       table2.fieldbyname('Poids_Unitaire').asstring:=edit8.text;
       table2.fieldbyname('Nombre_Unités').asstring:=edit9.text;
       table2.fieldbyname('Poids_Total').asstring:=edit10.text;
       table2.Edit;
       table2.post;
     
      for i:=1 to table5.RecordCount Do
       if table5.FieldValues['Code_Produit']=Combobox3.Text then
        begin
        Quantite:=table5.FieldValues['Quantité'];
        table5.Insert;
        table5.fieldbyname('Quantité_Entrée').asstring:=Quantite+(edit10.text);
        table5.Edit;
        table5.post;
        end
     
      else
       begin
       table5.insert;
       table5.fieldbyname('Produit_Entré').asstring:=Combobox3.text;
       table5.fieldbyname('Quantité_Entrée').asstring:=edit10.text;
       table5.Edit;
       table5.Post;
     
    showmessage ('Opération d''Enregistrement effectuée avec succés!!');
    La table5 est utilisée pour sauvegarder chaque produit et sa quantité totale en stock.
    Le problème c'est que ça marche pas.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    1er remarque sur l'ensemble, il faut absolument renommer les composants ne serait ce que pour ceux qui vont lire le code passent pas 3 ans à chercher à quoi correspond chaque composant.

    2em remarque, les noms de champ avec des accents c'est à bannir car cela peut générer des problèmes (Exemple s'il faut migrer la base de données vers une autre et qui n'accepte pas les accent dans le nom de champ).

    Au niveau du code
    Pour les if et la lisibilité du code autant utiliser Exit, ca evitera de faire des elseif à la chaine de plus les mettre tous dans une procédure ca aidera aussi pour la lisibilité.

    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
    44
    45
     
    if messagedlg('Êtes vous sûr de vouloir sauvegarder cet enregistrement?',mtconfirmation,[mbyes, mbno],0)=mrNo then
      Exit;
     
    if combobox3.text='' then
    begin
      Showmessage('Veuillez entrer le Code produit!');
      combobox3.SetFocus;
      Exit;
    end;
     
    if Maskedit4.text='' then
    begin
      showmessage('Veuillez entrer le Code Stock!');
      Maskedit4.SetFocus;
      Exit;
    end;
     
    if Maskedit1.text='' then
    begin
      showmessage('Veuillez entrer la date d''Entrée!');
      Maskedit1.SetFocus;
      Exit;
    end;
     
    if edit8.text='' then
    begin
      showmessage('Veuillez entrer le poids unitaire!');
      edit8.SetFocus;
      Exit;
    end;
     
    if  edit9.text='' then
    begin           
      showmessage('Veuillez entrer le nombre d''unités!');    
      edit9.SetFocus; 
      Exit;
    end;
     
    if edit10.text='' then
    begin
      showmessage('Veuillez entrer le poids Total!');
      edit10.setfocus;
      Exit;
    end;
    Pour le reste, Le edit ne sert a rien avant un Post

    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
     
       table2.insert;
       table2.fieldbyname('Code_Produit').asstring:=Combobox3.text;
       table2.fieldbyname('Code_Stock').asstring:=MaskEdit4.text;
       table2.fieldbyname('Date_Entrée').asstring:=MaskEdit1.text;
       table2.fieldbyname('Poids_Unitaire').asstring:=edit8.text;
       table2.fieldbyname('Nombre_Unités').asstring:=edit9.text;
       table2.fieldbyname('Poids_Total').asstring:=edit10.text;
    //   table2.Edit;
       table2.post;
     
      for i:=1 to table5.RecordCount Do
       if table5.FieldValues['Code_Produit']=Combobox3.Text then
        begin
        Quantite:=table5.FieldValues['Quantité'];
        table5.Insert;
        table5.fieldbyname('Quantité_Entrée').asstring:=Quantite+(edit10.text);
    //    table5.Edit;
        table5.post;
       end
       else begin
         table5.insert;
         table5.fieldbyname('Produit_Entré').asstring:=Combobox3.text;
         table5.fieldbyname('Quantité_Entrée').asstring:=edit10.text;
    //     table5.Edit;
         table5.Post;
       end;
    showmessage ('Opération d''Enregistrement effectuée avec succés!!');
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci Rayek pour es remarques je tacherai de faire ce que vous avez demander

    et merci beaucoup pour les codes je vais faire les modifications pour voir si c'est oki merci encore une fois

  4. #4
    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
    Salut,

    Tu pourrais éviter une boucler sur les records de ta table5, et ajouter de la lisiblité.

    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
    With Table5 do
    begin
      Open; // A voir si elle n'est déjà pas en ouverture
      Try
        Try
          If locate('Code_Produit',Combobox3.Text,[]) then
          begin // ici le code_produit à bien été trouvé dans la table5
            Quantite:= FieldValues['Quantité'];
            Insert;
            fieldbyname('Quantité_Entrée').asstring:=Quantite+(edit10.text);        
          end
          else
          begin
            Insert; //ici le code_produit n'a pas été trouvé dans la table5
            fieldbyname('Produit_Entré').asstring:=Combobox3.text; // bizarq que tu n'ai pas mis 'ée'  à Produit_Entré
            fieldbyname('Quantité_Entrée').asstring:=edit10.text;
          end;
     
          post; // On valide le travail dans tous les cas
     
          messagedlg('Opération d''Enregistrement effectuée avec succés!!',mtInformation,[mbOk],0); // Aura lieu uniquement si insert et post à fonctionné
        Except
          messagedlg('Opération d''Enregistrement échouée veuillez avertir votre administrateur !!',mtWarning,[mbOk],0); // Ajouter ici une vrai gestion d'erreur avec code erreur etc... pour faire mieux
        end;
      Finally
        Close; // A voir si nécessaire
      end;
    end; {End With}
    Par contre a proscrire les Showmessages, parceque sous seven c'est vraiment moche, le mieux c'est de remplacer tes showmessages par un MessageDlg.

    Comme Rayek, les noms de champ avec accent sont à proscrire.


    GROSSE REMARQUE

    tu est sur de cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fieldbyname('Quantité_Entrée').asstring:=Quantite+(edit10.text);
    Parcque normalement ton champ quantité est numérique !! la on concatene 2 texts !!

    Il serait plus logique de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fieldbyname('Quantité_Entrée').asFloat:=StrToFloat(Quantite)+StrTofloat((edit10.text));

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Un grand merci à tous
    merci à tous pour l'aide que vous m'avez apporter et le temps que vous avez consacrer pour me repondre votre aide etait prédieuse pour moi et ça m'a permis d'avancer dans mon application

    merci encore une fois et c'est tres gentil de votre part:

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

Discussions similaires

  1. Gérer les quantités disponibles en stock
    Par adrianolimit dans le forum Schéma
    Réponses: 5
    Dernier message: 08/08/2012, 16h41
  2. Impossible de mettre a jour les données d un Query
    Par tarmo57 dans le forum Débuter
    Réponses: 12
    Dernier message: 17/03/2012, 07h41
  3. impossible d'installer ou de mettre à jour les contrib FF
    Par gotcha5832 dans le forum Firefox
    Réponses: 0
    Dernier message: 07/02/2010, 03h24
  4. Réponses: 1
    Dernier message: 12/10/2007, 12h06
  5. Impossible de mettre a jour les plans de maintenance
    Par sqlakf76 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/11/2006, 18h06

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