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

WinDev Discussion :

Valeur Tableau colonne de type durée [WD18]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut Valeur Tableau colonne de type durée
    Bonjour,

    Dans un tableau (rempli par programmation), j'ai une colonne de type durée.
    Je souhaite récupérer cette durée dans une variable de type durée.

    Mon problème vient du fait que les deux traitement suivant ne me renvoi pas la même valeur :
    Dans le traitement de sélection d'un ligne j'effectue le traitement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Trace(TABLE_IntAFact.COL_Duree[TABLE_IntAFact])
    Trace(TABLE_IntAFact[TABLE_IntAFact].COL_Duree)
    Trace(TABLE_IntAFact.COL_Duree)
    Si dans la ligne sélectionné j'ai 6min, jobtient le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    60000
    60000
    000060000
    Sachant que je doit récupérer la valeur avec l'indice (TABLE_IntAFact.COL_Duree[i]), j'aimerai savoir :
    si il existe un moyen de récupérer en spécifiant l'indice la valeur 000060000 et non 60000 sans avoir a rajouter les 0 manuellement.
    si il s'agit d'une fonctionnalité (ou d'un bug) connu.

    Pour information, dans les paramètres de la colonne, dans la valeur retournée, j'ai : JHHMMSSLL

    Merci

  2. #2
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour,

    je préfère cette notation :
    Trace(TABLE_IntAFact[TABLE_IntAFact].COL_Duree)
    qui me parle d'avantage quand je repasse sur la ligne quelques mois plus tard...

    Mais pour votre question pourquoi la valeur 60000 ne vous convient-elle pas dans la mesure ou elle est juste.
    Que faites vous de cette donnée ?
    si c'est pour la concaténer à une chaine utilisez DuréeVersChaîne(....
    si c'est pour l'utiliser comme une durée je ne vois pas le problème.

    Pouvez vous nous donner un peu plus de lumière sur votre cas?

    Bon dev

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Mon problème est le suivant :
    Je souhaite mettre la valeur de la colonne durée dans une variable de type durée,
    dans la ligne que je sélectionne il y a la valeur 2m10s

    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
    d est une Durée
    Trace(TABLE_IntAFact[TABLE_IntAFact].COL_Duree) //210000
    d = ChaîneVersDurée(TABLE_IntAFact[TABLE_IntAFact].COL_Duree,duréeCentième)
    Trace(DuréeVersChaîne(d,"JjHHhMMmSSs")) //0j00h00m00s
    
    Trace(TABLE_IntAFact[TABLE_IntAFact].COL_Duree) //210000
    d = ChaîneVersDurée(TABLE_IntAFact[TABLE_IntAFact].COL_Duree,duréeMillième)
    Trace(DuréeVersChaîne(d,"JjHHhMMmSSs")) //0j00h00m00s
    
    Trace(Val(TABLE_IntAFact[TABLE_IntAFact].COL_Duree)) //210000
    d = Val(TABLE_IntAFact[TABLE_IntAFact].COL_Duree)
    Trace(DuréeVersChaîne(d,"JjHHhMMmSSs")) //0j00h03m30s
    //3m30 -> 210sec, valeur logique puisque d'aprèes la doc un entier affecté a une durée est considéré comme un nombre de milliseconde
    
    Trace(TABLE_IntAFact.COL_Duree) //0000210000
    d = TABLE_IntAFact.COL_Duree
    Trace(DuréeVersChaîne(d,"JjHHhMMmSSs")) //0j00h02m10s
    Ce que je souhaite savoir c'est si il existe moyen direct de récupérer la valeur de la colonne durée dans une variable de type durée comme dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = TABLE_IntAFact.COL_Duree
    En précisant l'indice de la ligne, mais sans avoir a faire quelquechose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = ChaîneVersDurée(Droite("0000000000"+TABLE_IntAFact[i].COL_Duree,10),duréeCentième)
    sachant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d = TABLE_IntAFact[TABLE_IntAFact].COL_Duree
    déclenche l'exception suivante :
    Un élément de type 'chaîne ANSI' ne peut pas être converti vers le type 'durée'.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Si la colonne de la table est de type chaine (c'est ce qu'indique le message), il faut nécessairement faire une conversion, à l'aide de ChaineVersDurée().

    Tatayo.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Le problème est bien la, la colonne n'est pas de type chaine, mais de type durée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TABLE_IntAFact.COL_Duree //renvoi une durée
    TABLE_IntAFact[TABLE_IntAFact].COL_Duree //renvoi une chaine

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Je viens de faire le test... je reproduis le dysfonctionnement...

    Le plus étrange est que :
    -> si tu initialise une valeur (via tableajoute par exemple) : le problème apparait
    -> si tu saisis une valeur : il n'y a pas de problème....

    Donc faire un ChaineVersDuree() sécurise le bizness mais c'est vrai que ce n'est pas normal...

    Qui a le courage de faire un mail au support technique pour tenter de leur faire admettre qu'il y a un soucis ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour,

    En attendant de trouver une vrai solution, vous pouvez feinter windev en faisant un TableSelectPlus(MaTable,indice) juste avant la récupération de la valeur...

    Quitte à rendre invisible l'affichage histoire qu'on ne voit pas le bandeau de sélection...

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 36
    Points : 53
    Points
    53
    Par défaut
    Suite a ce que m'a dit michel.souris, j'ai fait quelque test supplémentaire.
    J'ai vérifié en le reproduisant sur mon tableau ceci :
    -> si tu initialise une valeur (via tableajoute par exemple) : le problème apparait
    -> si tu saisis une valeur : il n'y a pas de problème....
    J'ai ensuite regardé l'ajout dans le tabeau.
    Pour la colonne durée j'ajoutait une chaine.
    J'ai donc remplacé cet ajout par une durée (avec chaineVersDurée), ce qui semble plus correct vu que la colonne est de type durée.
    Maintenant que j'appele de façon indicé ou non mon tableau, j'obtient la bonne valeur (ex : 2m10s -> 0000210000).

    On peut donc en déduire que :
    • l'appel non indicé renvoi la valeur ajouté convertie au type de la colonne.
    • l'appel indicé renvoi lui la valeur qui a été ajouté au tableau sans convertion.
    • lors de la saisie dans le tableau, la données ajouté est convertie au type de la colonne.


    Merci a tous pour vos réponses.

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

Discussions similaires

  1. Implémenter tableau colonnes de type NN
    Par damienlelol dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/06/2014, 21h02
  2. Réponses: 1
    Dernier message: 01/01/2013, 09h24
  3. Insérer la valeur NULL dans une colonne de type number
    Par cocoaparis dans le forum PL/SQL
    Réponses: 8
    Dernier message: 08/07/2009, 15h46
  4. Colonne de type integer avec valeur vide
    Par radzar dans le forum SQL
    Réponses: 2
    Dernier message: 18/05/2009, 20h18
  5. Réponses: 13
    Dernier message: 01/02/2006, 12h00

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