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 :

Besoin d'aide pour un procédure de calcul


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut Besoin d'aide pour un procédure de calcul
    Bonjour
    la base de donnée qui j'utilise c'est ABSOLUTE DATABASE LANGAGE DELPHI7
    J'ai un calcul provenant des trois tables
    le champ de calcule qui ce trouve dans les trois tables = Mt
    ٍvoilà le code
    Je veux que les conditions appropriées Dans le cas de la table "DMArch.TFev" est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DM.TCumule.fieldvalues['Mtot']:=DMArch.TJan.fieldvalues['Mt']+DMArch.TFev.Fieldvalues['Mt']+TMar.Fieldvalues['Mt'];
    S'il ya une table vide
    Supposons que la Table "DMArch.TFev" est vide
    Quelle est la condition appropriée
    Avec les connaissances que ce n'est pas toujours l'une des tables vides
    Donc, s'il vous plaît aider à effectuer un calcul en ajoutant une condition de leur valeur si il ya une table vide

    J'ai essayé ce code mais n'a pas réussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If DMArch.TFev.recordcount<>Null then 
    begin
    DM.TCumule.edit;
    DM.TCumule.fieldvalues['Mtot']:=DMArch.TJan.fieldvalues['Mt']+DMArch.TFev.Fieldvalues['Mt']+TMar.Fieldvalues['Mt'];
    end else begin
    DM.TCumule.fieldvalues['Mtot']:=DMArch.TJan.fieldvalues['Mt']+TMar.Fieldvalues['Mt'];
    end;
    DM.TCumule.Post;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    En Français c'est quoi la question ?
    Pourquoi ne pas utiliser un SQL, si tu as une table par mois, un UNION te permettrait de récupérer, SUM MT d'un seul coup

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT SUM(MT) as Mtot 
    FROM 
      (SELECT MT FROM TJan
       UNION
       SELECT MT FROM TFev
       UNION
       SELECT MT FROM TMar
      )

    si ABSOLUTE DATABASE ne supporte par la requête imbriqué, on peut espérer que cela supporte des tables temporaires

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TEMPORARY TABLE __CumulMT (MT Integer);
    INSERT INTO SumMT SELECT MT FROM TJan;
    INSERT INTO SumMT SELECT MT FROM TFev;
    INSERT INTO SumMT SELECT MT FROM TMar;
    SELECT SUM(MT) as Mtot From __CumulMT;
    DROP TEMPORARY TABLE __CumulMT;
    a tenter aussi
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO SumMT (SELECT ... UNION SELECT ...);

    tu as regarde le TDataSet et ses fonctions de bases comme IsEmpty() ?
    RecordCount c'est un Integer, pourquoi comparer à Null ? faut lire la documentation avant de pondre n'importe quoi !

    Es-tu un étudiant qui débute ? utilise la Touche F1 pour obtenir l'aide de Delphi 7, elle est de très bonne qualité !
    Tu gagneras du temps et de l'expérience à chercher par toi même qu'a venir posé des questions sur le forum, tu ne progresses pas avec cette démarche !

    Enfin, c'est pourtant simple !
    Voilà un sushi prêt à être gober !

    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
    var
      Cumul: Integer; 
    begin
      Cumul := 0;
      if not DMArch.TJan.IsEmpty then
        Inc(Cumul, DMArch.TJan.fieldByName('Mt').AsInteger);
      if not DMArch.TFev.IsEmpty then
        Inc(Cumul, DMArch.TFev.fieldByName('Mt').AsInteger); 
      if not DMArch.TMar.IsEmpty then
        Inc(Cumul, DMArch.TMar.fieldByName('Mt').AsInteger);
     
      if DM.TCumule.fieldvalues['Mtot'] <> Cumul  then
      begin
        DM.TCumule.edit;
        DM.TCumule.fieldvalues['Mtot'] := Cumul ;
        DM.TCumule.Post;
      end;
    end;
    C'est la même chose avec des Double, Inc(c, d) devient c := c + d;
    Evite le FieldValues, l'utilisation de variant pour des calculs ce n'est pas malin !
    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
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup
    Mais
    Il ya un problème je ne comprends pas
    Si le montant contient les deux chiffres après la virgule
    Supposons que j'ai un montant égal à 200,33
    Et un montant égal à 100,22
    Pour la solution est venue dans le montant global est votre réponse 300,00
    Mais doit être égale à 300,55 Total
    Si oui, comment puis-je
    J'ai changé le type de variable par real;
    voila mon 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
     
      Cumul: Real; 
    begin
      Cumul := 0;
      if not DMArch.TJan.IsEmpty then
        Cumul:=Cumul+DMArch.TJan.fieldByName('Mt').Asfloat;
      if not DMArch.TFev.IsEmpty then
        Cumul:=Cumul+DMArch.TFev.fieldByName('Mt').Asfloat; 
      if not DMArch.TMar.IsEmpty then
        Cumul:=Cumul+DMArch.TMar.fieldByName('Mt').Asfloat;
     
      if DM.TCumule.fieldvalues['Mtot'] <> Cumul  then
      begin
        DM.TCumule.edit;
        DM.TCumule.fieldvalues['Mtot'] := Cumul ;
        DM.TCumule.Post;
      end;
    end;
    Après avoir changé le type de variable
    Code a travaillé avec succès
    Si ce code est correct
    Pas entraîner de problème après

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pourquoi tous les débutants choisissent real ?
    AsFloat renvoie un double, utilise un double !
    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

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pourquoi tous les débutants choisissent real ?
    AsFloat renvoie un double, utilise un double !
    Mr.ShaiLeTroll
    Bonjour
    Puis-je obtenir le même résultat avec l'aide du même code que tu m'as donné et celui qui a la même variable que le résultat contient les chiffres après la virgule
    Par exemple : 200,33+100,22 = 300,55
    Si possible, vous pouvez nous donner alors comment pouvons-nous utiliser la variable "Real"

  6. #6
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Bonjour,
    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
    Var
      Cumul: Double; 
    begin
      Cumul := 0;
      With DMArch do
      Begin  
        if not TJan.IsEmpty then
          Cumul := Cumul + TJan.fieldByName('Mt').Asfloat;
        if not TFev.IsEmpty then
          Cumul := Cumul + TFev.fieldByName('Mt').Asfloat; 
        if not TMar.IsEmpty then
          Cumul := Cumul + TMar.fieldByName('Mt').Asfloat;
      end; 
      With DM.TCumule do
      begin 
        if Fieldvalues['Mtot'] <> Cumul  then
        begin
          Edit;
          Fieldvalues['Mtot'] := Cumul ;
          Post;
        end;
      end;
    end;
    On progresse .....

Discussions similaires

  1. Besoin d'aide Pour une Requete de Calcul Totaux
    Par good speed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/03/2008, 15h58
  2. Besoin d'aide pour faire une procédure stockée
    Par PoichOU dans le forum SQL
    Réponses: 17
    Dernier message: 30/04/2007, 17h55
  3. Besoin d'aide pour un calcul sur un site
    Par barre dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2007, 08h36
  4. Besoin d'aide pour un débutant en procédure stockée
    Par el gringo dans le forum Débuter
    Réponses: 2
    Dernier message: 06/04/2006, 11h17

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