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 :

CompareValue avec bdd


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut CompareValue avec bdd
    bonjour
    j'ai bien chercher dans le web est surtout dans www.developpez.net/forums/ a trouvé une solution pour comparer deux valeurs de deux enregistrements dans les bases de données(temp et stock),on évitant la nostalgie (boucle) des années 70
    en fin j'ai trouvé la procédure MiseAJourStock(); que j'ai modifie a mes besoins mais j'ai rencontré les problèmes suivants :
    1- riens à afficher
    2- Erreur: Expression constante attendue si je fait (Form1.ListBox1.Items.Add(Form1.T_TempVProd_VT.Value);
    bien-sure je veux bien balayer toutes les enregistrements
    la procédure est :
    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
     
    procedure MiseAJourStock2();
    var
      Result: double;
    QuantiteDisponible,QuantiteDemandee: double;
    begin
    QuantiteDisponible := form1.Q_stockSTOCK.value;
     QuantiteDemandee:=Form1.T_TempVQte_VT.Value;
    if (Form1.Q_stock.recordcount> 0) then begin
      case CompareValue(QuantiteDemandee,  QuantiteDisponible) of
    // Quantité demandée inférieure à celle disponible
      LessThanValue: begin
        Result := 0;
        Form1.Q_stock.edit;
        Form1.Q_stockSTOCK.value:= QuantiteDisponible-QuantiteDemandee;
        //Form1.Q_stock.post;
        Form1.Edit1.text := FloatToStr(Result);
      end;
      EqualsValue: begin
    // Quantité demandée égale à celle disponible
        //Form1.Q_stock.delete;
        Result := 0;
        Form1.Edit1.text := FloatToStr(Result);
      end;
      GreaterThanValue:
    // Quantité demandée supérieure à celle disponible
        Result := QuantiteDemandee-QuantiteDisponible;
     
    Form1.ListBox1.Items.Add(Form1.T_TempVProd_VT.Value)
    ShowMessage('des saisies de quantitées supérieure a celles du stock ');
     
     
    //    MiseAJourStock2(Result);
      end;
    end;
    end;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 460
    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 460
    Points : 24 874
    Points
    24 874
    Par défaut
    Il manque un begin après GreaterThanValue
    Entre le nommage, l'indentation, ... faudrait être plus rigoureux.

    et une boucle c'est un classique while nof Eof do Next
    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

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Il manque un begin après GreaterThanValue [/I]
    merci vraiment vous avez une Oueil de Troll

    pour ma boucle classique elle fait bien le travail , mais je veux bien tester (GreaterThanValue, LessThanValue, EqualsValue) avec une boucle .

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Où intervient cette notion de boucle (à part dans la nostalgie) ?
    C'est vraiment très mal expliqué ! Bien sûr, avec l'historique des posts il s'agit d'ABSOLUTE DATABASE (donc un Paradox sans BDE) ce qui me fourni (avec de l'imagination) une idée de ce qui est voulu. Mais, toute cette interface utilisateur (form1, listbox, edit) me fait douter, s'agirait-il d'un programme test pour vérifier ce qui se passerait en utilisant cette procédure ?

    ma réaction sur la procédure : que c'est moche comme code ! Pourquoi ? Tout d'abord j'ai horreur
    - D'un code où je vois des appels à une forme un peu partout
    - Des requêtes associées à une forme, un datamodule c'est mieux
    puis :
    - à quoi sert le test if (Form1.Q_stock.recordcount> 0) ?
    - qu'est-ce que cette histoire de result ? à part une cause de confusion, on utilise result pour une fonction.

    Ensuite où se trouve cette procedure (dans quelle unité ? unité indépendante ou dans l'unité de form1 ou ?) et comment est-elle utilisée ?

    comment déclarerai ça ?
    - en premier lieu j'en ferai une procedure (voire une fonction) dans la partie privée de Form1 ou alors au sein de l'évènement qui fait appel à cette procedure (ce qui éviterai ces Form1.)
    - puis en mettant des paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure MiseAJourStock2(const QuantiteDisponible,QuantiteDemandee: double);
    ou en faisant une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function MiseAJourStock2(const QuantiteDisponible,QuantiteDemandee: double) : Double;
    begin
     Result:=0; 
     case CompareValue(QuantiteDemandee,  QuantiteDisponible) of
      LessThanValue:  Result := QuantiteDisponible-QuantiteDemandee;
      EqualsValue: result:=0; // inutile
      GreaterThanValue: Result := QuantiteDemandee-QuantiteDisponible;
    end;
    end;

    2- Erreur: Expression constante attendue si je fait (Form1.ListBox1.Items.Add(Form1.T_TempVProd_VT.Value);
    correction Form1.ListBox1.Items.Add(Form1.T_TempVProd_VT.asString) mais là encore toutes ces indications de Form1 me donne le tournis
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    bonjour
    SergioMaster
    C'est vraiment très mal expliqué !
    Bien sûr, avec l'historique des posts il s'agit d'ABSOLUTE DATABASE (donc un Paradox sans BDE) ce qui me fourni (avec de l'imagination) une idée de ce qui est voulu.
    Mais, toute cette interface utilisateur (form1, listbox, edit) me fait douter, s'agirait-il d'un programme test pour vérifier ce qui se passerait en utilisant cette procédure ?
    on dirait que vous lisez mes pensées
    1- oui c'est un programme d'essai pour introduire cette procedure( LessThanValue, EqualsValue, GreaterThanValu) dans le poste antérieur
    2- pour la redondance(Form1) parce que je n'est pas encore déclarer la procedure dans la partie Type.

    3- ma demande : comment introduire une boucle qui balayer les enregistrements dans la partie : GreaterThanValu ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    on dirait que vous lisez mes pensées
    J'ai surtout une bonne boule de cristal et des années d'expériences
    3- ma demande : comment introduire une boucle qui balayer les enregistrements dans la partie : GreaterThanValu ?
    une boucle alors qu'un simple SQL pourrait, peut-être suffire ????

    Pour bien répondre, ce n'est pas tant ce pseudo code mal fagotté mais la description des deux tables et l'objectif final qu'il faudrait
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut

    description des quatre tables
    1- ( t.TempV , t.Sorties ) ont les mêmes champs
    2- on doit glisser déposer entres (Q_Entrees) les champs (Cd_P, produits, qte ,Unites,Prix_Vente) et la table Tempv avant d'enregistrer dans la table sorties
    3- parfois on oublie de saisir la quantitée ou de saisir une quantitée plus que le stock. la je veux faire une boucle qui vérifier la quantitée saisie dans la table tempV et la quantitée disponible en stock , et s'il y'a des erreurs on l'ajoutent a une listbox1 pour pouvoir corriger .
    j'ai fait cette [b]procedure[/] qui marche mais sincèrement je ne suis pas satisfait.
    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
     
    procedure TForm1.MiseAJourStock();
    var
      Result:Double;
    QuantiteDisponible,QuantiteDemandee:Double;
    begin
     QuantiteDisponible := Q_stockSTOCK.value;
     QuantiteDemandee:=T_TempVQte_VT.Value;
        if (Q_stock.recordcount> 0) then
          begin
     
             case CompareValue(QuantiteDemandee,  QuantiteDisponible) of
             // Quantité demandée inférieure à celle disponible
             LessThanValue: begin
               Result := 0;
              Edit1.text := FloatToStr(Result);
                            end;
             EqualsValue: begin
             // Quantité demandée égale à celle disponible
              Result := 0;
                          end;
             GreaterThanValue:  begin
             // Quantité demandée supérieure à celle disponible
             Result := QuantiteDemandee-QuantiteDisponible;
             Q_Stock.Filtered:=False;
             ListBox1.Clear;
             T_TempV.DisableControls; 
             Q_Stock.DisableControls;
                     try
                     Q_Stock.First;
                      while not Q_Stock.eof do
                      begin
                       T_TempV.First;
                       while not T_TempV.eof do
                       begin
                       if (T_TempV.fieldbyname('Prod_VT').asstring=
                       Q_Stock.FieldByName('Produits').asstring) AND
                      (T_TempV.fieldbyname('Qte_VT').Value>
                       Q_Stock.FieldByName('STOCK').Value)
                      then
                       begin
                        ListBox1.Clear;
                        ListBox1.Items.Add(Form1.T_TempVProd_VT.Value);
                      Break; 
     
                     T_TempV.Next; 
                     end;
                    T_TempV.Next;
                 end; 
                   Q_Stock.Next; 
                       end;
     
           finally
           T_TempV.EnableControls;
           Q_Stock.EnableControls;
           end;
         end;
          end;
    end;
    end;
    une boucle alors qu'un simple SQL pourrait, peut-être suffire ????
    j'aimerais bien voir cette SQL si vous avez le temps.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    C'est loin d'être clair comme description de tables (ma boule de cristal doit être embuée).
    description des quatre tables
    je ne lis que trois noms de table t.TempV , t.Sorties et Q_Entrees et encore ce t. me gêne.

    on doit glisser déposer
    c'est la première fois que j'entends parler de glisser déposer dans une base de données
    Je rigole mais un peu jaune, la partie interface ne m'intéresse pas, c'est uniquement la partie description des tables impliquées dans la boucle que je voulais lire
    or :
    ( t.TempV , t.Sorties ) ont les mêmes champs
    ne me dit pas quels sont les colonnes (et nom exact) de ces deux tables, ni d'ailleurs la cardinalité entre les deux (1,0 - 1,1 - 1,n)
    d'ailleurs l'assertion 'même champs' est fausse si je lis le code
    TempV (Prod_VT string,Qte_VT integer/float ?)
    Stock(Produits string ,STOCK integer)
    * à ce propos les .value ça n'aide pas à avoir le type de donnée et pire, cela peut jouer des tours avec la valeur Null


    j'aimerais bien voir cette SQL si vous avez le temps.
    ça je m'en doutais, en essuyant ma boule de cristal et ne prenant en compte que les cardinalités (faute d'autre terme) 1,0 ou 1-1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  T.Prod_VT,T.Qte_VT,S.Stock,S.Stock-T.T.Qte_VT Ecart   FROM Tempv T join STOCK S ON s.Produits=t.Prod_VT 
    WHERE S.Stock<T.Qte_VT
    Tellment plus simple qu'une boucle
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    merci de me répondre si vite merci encore a tous

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

Discussions similaires

  1. probleme avec BDD et tutorial
    Par jean-marc2 dans le forum Flash
    Réponses: 6
    Dernier message: 02/11/2006, 09h36
  2. connection avec BDD MySQL
    Par devlopassion dans le forum C++Builder
    Réponses: 4
    Dernier message: 30/09/2006, 14h48
  3. [C#]Problème OleDbCommand.ExecuteReader avec BdD Access
    Par Renesis57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2006, 18h36
  4. [Conception] SELECT dépendant d'un autre (avec BDD)
    Par banzzai dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/08/2006, 17h57
  5. [C#][débutant] Appz avec bdd
    Par Kerod dans le forum Windows Forms
    Réponses: 5
    Dernier message: 14/05/2006, 17h28

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