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 :

Calcul dans bd


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Par défaut Calcul dans bd
    Bonjour tout le monde
    Voici mon problème, je debute en delphi
    j'utilise d7 et une base de donnés paradox

    le champs 'temps' est de type Time
    le champ 'prix_heure' est de type currenc
    le champ calculé 'total' est de type currency

    dans le oncalcfield de ma table je fais comme cela :
    Table1total.value := Table1temps.value * Table1prix_heure.value;

    mais helas cela ne me donne pas le bon resultat.
    ex:
    champ temps Ch_prix_heure chp_Cout_total
    03:30:00 x 15,00 € = 52,50 €

    et moi je me retrouve avec un total de 2,19 €
    merci de bien vouloir m'eclairer sur ce probleme.

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    salut,
    normal que cela ne te donne pas un bon résultat, car tu as affaire à deux types de données différents. déjà quelle est l'unité de mesure du temps ? l'heure ou la minute ? si c'est l'heure, utilise une fonction qui te retourne le nombre d'heures dans Table1temps.Value avant de faire l'opération. je ne me rapelle plus trop du nom de la fonction en question, mais je crois qu'elle se trouve dans l'unité DateUtils

  3. #3
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Salut,
    Il serait préférable de faire des calculs avec un format Float.
    Une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // dTime: double
    // Hr, Mn, Sec: word;
      DecodeTime(FieldByname('temps').AsDateTime, Hr, Mn, Sec, Sec);
      dTime := Hr + ((Mn / 60 * 100) / 100);
      FieldByName('total').AsCurrency := dTime * FieldByName('prix_heure').AsCurrency;
    @+
    Fabrice

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Par défaut
    merci beaucoup de votre aide mais le resultat du champ 'total' reste à 0,00 €
    et je comprends pas pourquoi.

  5. #5
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    J'ai essayé avec succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Table1BeforePost(DataSet: TDataSet);
     var
    	Hr, Mn, Sec: word;
    	dTime: double;
     begin
    	with Table1 do begin
    		DecodeTime(FieldByname('temps').AsDateTime, Hr, Mn, Sec, Sec);
    		dTime := Hr + ((Mn / 60 * 100) / 100);
    		FieldByName('total').AsCurrency := dTime * FieldByName('prix_heure').AsCurrency;
    	end;
     end;
    J'ai utilisé OnBeforePost, car OnCalcField consomme trop de ressources, et est appelé à chaque modification d'un TField (à chaque caractère saisi).
    @+
    Fabrice

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Par défaut
    merci beaucoup, cette fois-ci ca fonctionne
    merci beaucoup

  7. #7
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Alors un petit tag [Résolu]...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/09/2005, 21h07
  2. Calcul dans un triggers : problème du +
    Par eXiaNazaire dans le forum Oracle
    Réponses: 3
    Dernier message: 07/01/2005, 10h14
  3. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57
  4. Calcul dans des champs de saisie
    Par leeloo076 dans le forum ASP
    Réponses: 4
    Dernier message: 07/04/2004, 10h09
  5. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 10h31

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