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 :

Faire une somme d'heures au format VARCHAR (Suite)


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut Faire une somme d'heures au format VARCHAR (Suite)
    Bonjour,

    je m'excuse de revenir sur le sujet mais voilà deux jours que je me prends la tête sur un problème.

    Pour mettre à jour 4 MaskEdit j'appelle, sur l'évènement FormShow de ma form, la function IntTimeToStr aimablement mis à jour par Claudius.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //=================================================
    procedure TfrmFeu.FormShow(Sender: TObject);
    begin
      H1.text:= IntTimeToStr(DM.ibdFeu.FieldByName('FEUDEPARTDEPOT').AsInteger);
      H2.text:= IntTimeToStr(DM.ibdFeu.FieldByName('FEUARRIVEECHANTIER').AsInteger);
      H3.text:= IntTimeToStr(DM.ibdFeu.FieldByName('FEUDEPARTCHANTIER').AsInteger);
      H4.text:= IntTimeToStr(DM.ibdFeu.FieldByName('FEUARRIVEEDEPOT').AsInteger);
    end;
    La function:
    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
     
    //==================================================
    function IntTimeToStr(Value: Integer): string;
    var
      J, H, M: Integer;
    begin
      J := Value div MinsPerDay;
      H := (Value mod MinsPerDay) div MinsPerHour;
      M := Value mod MinsPerHour;
      if J > 0 then
        Result := Format('%dj %.2d:%.2d', [J, H, M])
      else
        Result := Format('%.2d:%.2d', [H, M])
    end;
    //===============================================
    Le problème est que les trois premiers (H1, H2 et H3) se mettent bien à jour mais sur H4 la fonction me renvoie systématiquement 0 alors que j'ai mis dans la table 990 et devrais donc afficher 16:30.

    Le MaskEdit à exactement les mêmes propriétés que les trois autres et les quatre champs dans la table sont également identiques à savoir Numeric 12,4.

    Dans l'IBDataset j'ai bien 'FEUARRIVEEDEPOT' en Modification et insertion.

    Il y a quelque chose que je ne vois pas? Ou une piste?

    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Quel est la propriété EditMask de tes TMaskEdit ?

    @+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Salut

    Propriété EditMask : !90:00;1;_

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    La fonction renvoie bien '16:30' pour une valeur de 990.
    Donc le problème viens d'ailleurs.

    Un debug en pas à pas pour vérifier la valeur du champ FEUARRIVEEDEPOT donne quoi ?

    Fais tout de même attention à la fonction que je t'ai donnée, celle-ci va te renvoyer une chaîne de la forme '0j 00:00' si la valeur d'un champ est supérieur à 1440 ce qui ne sera plus en accord avec EditMask.

    @+

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    En affichant les étapes j'ai bien mon nombre de minutes mais au deuxième shomessage j'ai 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DM.ibdFeu.FieldByName('FEUDEPARTDEPOT').AsInteger := NbreMinute(H1.text);
      DM.ibdFeu.FieldByName('FEUARRIVEECHANTIER').AsInteger := NbreMinute(H2.text);
      DM.ibdFeu.FieldByName('FEUDEPARTCHANTIER').AsInteger := NbreMinute(H3.text);
      showmessage(IntToStr(NbreMinute(H4.text)));
      DM.ibdFeu.FieldByName('FEUARRIVEEDEPOT').AsInteger := NbreMinute(H4.text);
      showmessage(IntToStr(DM.ibdFeu.FieldByName('FEUARRIVEEDEPOT').AsInteger));
    c'est à dire que cette fonction NbreMinute renvoie 0 mais que sur ce champ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function NbreMinute(Extr:String):Integer;
    var t1,t2:Integer;
    begin
      t1:=StrToInt(copy(Extr,1,2));
      t2:=StrToInt(copy(Extr,4,2));
      Result:=(t1*60) + t2;
    end;

    Et en plus après enregistrement:

    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
     
    procedure TfrmFeu.btnEnregClick(Sender: TObject);
    begin
      try
      DM.ibdFeu.FieldByName('FEUDEPARTDEPOT').AsInteger := NbreMinute(H1.text);
      DM.ibdFeu.FieldByName('FEUARRIVEECHANTIER').AsInteger := NbreMinute(H2.text);
      DM.ibdFeu.FieldByName('FEUDEPARTCHANTIER').AsInteger := NbreMinute(H3.text);
      showmessage(IntToStr(NbreMinute(H4.text)));
      DM.ibdFeu.FieldByName('FEUARRIVEEDEPOT').AsInteger := NbreMinute(H4.text);
      showmessage(IntToStr(DM.ibdFeu.FieldByName('FEUARRIVEEDEPOT').AsInteger));
      DM.ibdFeu.Post;
      if DM.ibdFeu.transaction.InTransaction then begin
          DM.ibdFeu.Transaction.Commit;//Retaining;
          DM.ibdFeu.Open;
          end;
      except
        Showmessage('Erreur dans la saisie.');
      end;
    end;
    dans la table j'ai toujours 990 alors que les autres champs se mettent normalement à jour.

    Je ne comprends plus rien!!

    Pour répondre à ta remarque, sur ce EditMask il n'y aura pas plus de 24 h, le total du chantier s'effectuera sur un autre TEDIT

    Cordialement

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Je ne vois absolument aucune raison que ton champ ne soit pas alimenté avec la bonne valeur. Ta fonction NbreMinute est correcte.

    Un problème avec ton instruction InsertSQL ou ModifySQL ?

    @+

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Oui moi aussi c'est ce que je me dis depuis hier !
    J'utilise un TIBdataset avec:
    ModifySQL
    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
     
    update FEU
    set
      FEUCOD = :FEUCOD,
      PRJCOD = :PRJCOD,
      EMPCOD = :EMPCOD,
      FEUDAT = :FEUDAT,
      ACTCOD = :ACTCOD,
      FEUDEPARTDEPOT = :FEUDEPARTDEPOT,
      FEUARRIVEECHANTIER = :FEUARRIVEECHANTIER,
      FEUDEPARTCHANTIER = :FEUDEPARTCHANTIER,
      FEUARRIVEEDEPOT = :FEUARRIVEEDEPOT,
      FEUDUREETRAJET = :FEUDUREETRAJET,
      FEUDUREECHANTIER = :FEUDUREECHANTIER,
      FEUTOTALTRAJET = :FEUTOTALTRAJET,
      FEUTOTALCHANTIER = :FEUTOTALCHANTIER,
      FEUNOT = :FEUNOT
    where
      FEUCOD = :OLD_FEUCOD
    InsertSQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    insert into FEU
      (FEUCOD, PRJCOD, EMPCOD, FEUDAT, ACTCOD, FEUDEPARTDEPOT, FEUARRIVEECHANTIER, 
       FEUDEPARTCHANTIER, FEUARRIVEEDEPOT, FEUDUREETRAJET, FEUDUREECHANTIER, 
       FEUTOTALTRAJET, FEUTOTALCHANTIER, FEUNOT)
    values
      (:FEUCOD, :PRJCOD, :EMPCOD, :FEUDAT, :ACTCOD, :FEUDEPARTDEPOT, :FEUARRIVEECHANTIER, 
       :FEUDEPARTCHANTIER, :FEUARRIVEEDEPOT, :FEUDUREETRAJET, :FEUDUREECHANTIER, 
       :FEUTOTALTRAJET, :FEUTOTALCHANTIER, :FEUNOT)
    Je ne comprends absolument pas!!

    Cordialement

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bon tes instructions me semble correctes.

    Je cherche, je cherche.... Un problème de trigger ? As-tu un évèment BeforePost ? ou un autre ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    non, je n'ai pas de triggers ni d'évènement BeforePost.

    C'est dingue quand même!!!

    Cordialement

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    pour raison qui m'échappe maintenant ça à l'air de fonctionner normalement, je surveille de près.

    Je ne vois vraiment pas ce que j'ai changé!!!

    Une autre question:

    Quelle serait la technique pour afficher mes numériques au format 00:00:dans un DBGrid?

    D'avance merci

    Codial

Discussions similaires

  1. Faire une somme d'heures au format VARCHAR
    Par codial dans le forum Bases de données
    Réponses: 15
    Dernier message: 28/02/2008, 11h26
  2. Probleme pour faire une somme sous Excel
    Par Nicolas92 dans le forum Excel
    Réponses: 5
    Dernier message: 02/12/2005, 11h38
  3. Probleme pour faire une somme dans header ??
    Par snoop57 dans le forum Access
    Réponses: 7
    Dernier message: 01/12/2005, 13h40
  4. filtrer saisies et faire une somme globale
    Par mcellier dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 17h00
  5. faire une somme dans un état
    Par PAINCO dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2005, 19h41

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