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 :

Incrémentation sur une table de données (mise à jour)


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Février 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2019
    Messages : 53
    Points : 37
    Points
    37
    Par défaut Incrémentation sur une table de données (mise à jour)
    Bonjour tout le monde ,

    J'aimerai savoir comment faire une incrémentation sur enregistrements d'une table de données,

    Ma table Article [Id_article_t, Code_article_t, Designation_t, Prix_unitaire_t, Nbr_article_t]

    Quand j'insère un article, je fais tout simplement comme ceci :

    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
    //ADOTable3 =table_article
     
    Var SlearnerID1 : String;
    begin
     
     With ADOTable3 do
     
         begin
     
           SlearnerID1 := Id_cot.Text;  //(Id_code)
     
          ADOTable3.Insert ;
     
          ADOTable3['Id_article_t'] := Id_article.Text;
          ADOTable3['Code_article_t'] := Code_article.Text ;
          ADOTable3['Designation_t'] := DBLookupComboBox1.Text ;
          ADOTable3['Prix_unitaire_t'] := StrToFloat(Prix_unitaire.Text) ;
     
          ADOTable3['Nbr_article_t'] := Nbr_article.Text ;
     
     
          ADOTable3.Post ;
     
          end;
    end;

    jusqu'à la rien de magie et tout fonctionne bien
    Mais dans la mesure ou je devrai insérer un articale déja existant dans la table, plutôt qu'il s'affiche comme doublant, j'aimerai l'incrémenter celui-ci
    c'est a dire faire la mise a jour : afficher la désignation et le code une SEULE FOIS mais additionner le prix et le nombre d'article

    j'ai essayé ceci ci mais ça fonctionne pas :


    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
    Var SlearnerID1 : String;
    begin
     
     With ADOTable3 do
     
         begin
     
     
           SlearnerID1 := Id_cot.Text;  //(Id_code)
     
          if Id_article.Text = ADOTable3['Id_article_t'] then 
     
            begin
     
               ADOTable3.Insert ;
     
               ADOTable3['Id_article_t'] := Id_article.Text;
     
               ADOTable3['Code_article_t'] := Code_article.Text ;
               ADOTable3['Designation_t'] := DBLookupComboBox1.Text ;
     
               ADOTable3['Prix_unitaire_t'] := ADOTable3['Prix_unitaire_t'] + StrToFloat(Prix_unitaire.Text) ;
     
               ADOTable3['Nbr_article_t'] := ADOTable3['Nbr_article_t'] + Nbr_article.Text ;
     
     
               ADOTable3.Post ;
     
            end;
     
          end;
    end;
    Y'a t il une meilleure façon de faire ? Merci d'avance

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    En supposant que tu pointes déjà sur la bonne entrée, c'est un Edit et non un Insert.

    Mais ton approche est plutôt surprenante puisque le prix unitaire ne le sera plus

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Ce n'est pas plutôt une table de lignes de commande ?
    Article cela semble plus faire penser à une table listant les articles disponible, le catalogue
    Vu la structure on dirait plutôt un ligne de commande\facture
    La table semble mal nommée

    Locate pour retrouver la bonne ligne puis Edit() au lieu de Insert()


    Sinon pourquoi un ADOTable ? c'est du ACCESS ?
    Sinon un SQL avec TQuery serait plus adéquat la mise à jour serait plus facile d'ailleurs

    ID est une chaine, très douteux !

    Effectivement, il faudrait éclaircir si Prix_unitaire_t est un Prix Unitaire ou le montant total de la ligne c'est à dire toujours une valeur calculable "Prix Unitaire x Quantité"

    Je ne suis pas fan de l'utilisation des variants, je préfère faire explicitement un ParamByName().AsFloat par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      if ADOTable3.Locate('Id_article_t', VarArrayOf([Id_article.Text]), []) then 
      begin
        ADOTable3.Edit();
        ADOTable3['Prix_unitaire_t'] := ADOTable3['Prix_unitaire_t'] + StrToFloat(Prix_unitaire.Text) ; // Conversion implicite de Variant, cela semble étrange, c'est un total non ?
        ADOTable3['Nbr_article_t'] := ADOTable3['Nbr_article_t'] + StrToInt(Nbr_article.Text); // Conversion implicite de Variant
        ADOTable3.Post ;
      end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Accès à une table pendant sa mise à jour
    Par pierricktpt dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/05/2020, 17h09
  2. Réponses: 4
    Dernier message: 30/10/2014, 11h19
  3. [ComboBox]Pointer deux comboBox sur une table de données
    Par mordrhim dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/11/2009, 08h44
  4. [AC-2003] Créer un correcteur d'orthographe basé sur une table de données
    Par Miss Ti dans le forum VBA Access
    Réponses: 0
    Dernier message: 13/05/2009, 15h36
  5. Incrément sur une table selon groupe de valeurs ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/02/2008, 10h22

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