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

VB.NET Discussion :

Fonction Format() et syntaxe de Format


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut Fonction Format() et syntaxe de Format
    Bonjour,

    Je cherche actuellement à formater une chaine pour la rentrer dans ma base de donnée. Cette chaîne contient un nombre de mois (0, 1, 2, ...)
    Ce que j'aimerais, c'est pouvoir mettre un 0 avant le nombre si celui-ci est inférieur à 10 (01, 02, 03, ...)

    J'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Format(Me.TB_DUREETOP.Text, "00")
    Format(Me.TB_DUREETOP.Text, "##")
    J'ai tenté aussi avec un .ToString, un .Format, au final, j'obtiens pas le resultat souhaité
    J'admet ne rien saisir à la définition des format (j'ai le même problèmes sur les Regex Mais ce n'est pas le sujet).

    Mon problèmes c'est que je n'arrive pas à faire le parallèle entre la chaîne de sortie et le format, dans presque tous les exemples, je ne vois pas le lien
    Ca irait surement mieux quand je verrai la correspondance entre ces éléments

    Certains d'entre vous peut-être sauront m'aiguiller ou connaissent un Tuto vraiment simple ? (Celui de Plassere est bien, mais aller savoir pourquoi, je n'arrive à rien avec sur le peu que je comprend )

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Tu peux faire TB_DUREETOP.ToString("00")

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Merci de ta réponse, mais déjà testé, ça me lève une exception du type InvalidCastException.
    System.String en System.IFormatProvider

    J'ai tenté cela aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.Format("{0:D2}", Me.TB_DUREETOP.Text)
    (sans vraiment comprendre, juste une reprise du cours de Plassere)
    Toujours un seul chiffre dans la base, au moins ça le prend en compte

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    dans ta base de donner c'est un string?

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    A la base j'avais un int, que j'ai vite remplacé par un char(10), avant d'y mettre un nvarchar(10), normalement, ça passe correctement avec ce type de donnée, non?

    Et dans ma requête, j'entoure la valeur obtenu via le Format par des apostrophes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "duree_top = '" & ConvSQL(String.Format("{0:D2}", Trim(Me.TB_DUREETOP.Text))) & "' "
    PS: Je deviens violent quand on me parle de requête paramêtrée, même si je sais que la concaténation c'est pas bien, au moins, je sais m'en servir :p

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "duree_top = '" & Me.TB_DUREETOP.Text.Trim().ToString("00") & "' "
    et met un watch sur Me.TB_DUREETOP.Text.Trim().ToString("00")

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Un watch? Tu parle d'un espion? Si oui, on peut en mettre ailleur que sur des variables?

    Cela mis à part, cette ligne me provoque toujours une exception de type InvalidCastException, il aime pas le passe d'un string vers un IFormatProvider

    J'essaye de triffouiller voir si c'est arrangeable, mais je doute

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    tu peux mettre executer du code avec un watch
    tu es sur que tu as une valeur valide dans ton textbox?

    tu mets dans les espions
    Me.TB_DUREETOP.Text
    Me.TB_DUREETOP.Text.ToString("00")

    et tu verras surement ton problème

    et un breakpoint pour voir si l'erreur vient bien de cette ligne là

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Pour le breakpoint c'est fait, et oui l'erreur viens de cette ligne

    Ma TextBox contient la valeur "8"
    Donc TB.Text = "8"

    Et vu que TB.Text.ToString("00") lève une exception, ben il n'a pas de valeur

    Enfin, pour le watch, je vois absolument pas, je vais voir sur google :p

    Edit: en fait c'est juste une façon de nommer l'ensemble des fenêtres servant à visualiser le contenu des variables et autres infos sur le code pendant le mode debug?

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    oui

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    bon d'accord le ToString("00") marche pas


    String.Format("00","8") marche part contre

    sur ce je prend mon train

  12. #12
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Dans ce cas, tout correspond à ce que je t'ai signalé :

    Valeur de la Text Box : "8"
    Valeur après .ToString("00") (d'après l'espion) : "Impossible de convertir en 'Inteface IFormatProvider'

    Perso je serais tenté de revenir à mon ancienne synthaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.Format("{0:D2}", Me.TB_DUREETOP.Text)
    Elle prend toujours pas le 0, mais ne me lève pas d'exception.

    Je comprend rien

    Edit :
    Effectivement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String.Format("00", Me.TB_DUREETOP.Text)
    ne me lève pas d'exceptions, mais m'enregistre '00' dans la base (au moins j'ai le 0 au début )

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(CInt(TB_DUREETOP.Text), "0#")
    Avec peut être un .ToString en fin.

    1) Pour appliquer un format numérique, il faut un nombre d'où la convertion.
    2) Le spécificateur de format 0, impose un zéro si il n'y a pas de chiffre dans le nombre à cet emplacement.

  14. #14
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 199
    Par défaut
    Il faut convertir le string en int pour le retransformer en text
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "duree_top = '" & String.Format("{0:00}", Int.Parse( Me.TB_DUREETOP.Text.Trim()) & "' "

  15. #15
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Personne n'a fait remarquer que formatter une chaine AVANT de l'écrire dans une base de donnée est une idée un peu étrange a priori et suppose un usage assez curieux de la base de donnée ?

    En général, le formattage de chaine, ça ne sert que pour l'affichage. (et l'impression, bien sur).

  16. #16
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2011
    Messages : 70
    Par défaut
    Effectivement le problème venait de la, pour appliquer le format il faut bien convertir la chaîne en int avant de la repasser en String. Ca marche

    @BlueDeep : Possible, je m'y connais pas vraiment dans le domaine des "bonnes pratiques", et il s'avère que ce stockage n'est plus necessaire pour le traitement actuel de ces données. Mais au moins ça m'a permis d'avancer sur ces fonction de Format de données :p

    Sujet résolu, merci à tous

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

Discussions similaires

  1. Fonction Format : mauvaise syntaxe ou inutilisable ?
    Par sebnantes dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 25/03/2010, 14h57
  2. [AC-97] Fonction TransférerTexte - où est le format ?
    Par jehhej dans le forum Modélisation
    Réponses: 3
    Dernier message: 02/10/2009, 13h01
  3. [VBA]fonction pour copier valeur ET format
    Par daniel_gre dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2008, 00h00
  4. Fonction pour charger une chaine formaté
    Par dxdiag dans le forum Débuter
    Réponses: 5
    Dernier message: 08/02/2008, 21h35
  5. formater un nombre en format "monétaire"
    Par jm6570 dans le forum Access
    Réponses: 2
    Dernier message: 14/09/2005, 10h06

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