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

Composants VCL Delphi Discussion :

Problème de fonction Format


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Problème de fonction Format
    Bonjour à tous

    Je veux afficher à partir d'une Base SQLite les donnée dans un memo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     // affichage de la liste des comptes
      MemoComptes.Lines.Add(String.Format('%18s|%35s|%25s|', [' Nom ', ' Banque ',  ' Solde Initial ']));
      // Ajouter une ligne au mémo pour chaque enregistrement de la table.
     
      while not DataModule2.FDQueryMaitre.Eof do
      begin
        MemoComptes.Lines.Add(String.Format('%18d|%-35s|%-25s|',[DataModule2.FDQueryMaitre.FieldByName('NomCpt')
          .AsString + '         ' + DataModule2.FDQueryMaitre.FieldByName('Banque')
          .AsString + '                    ' + FloatToStr(DataModule2.FDQueryMaitre.FieldByName
          ('SoldeInit').AsFloat) + ' ' + #128]));
        DataModule2.FDQueryMaitre.Next;
      end;
    Lors de la première partie (affichage des Entêtes de colonne Pas de Pb tout est OK
    Par contre dans la boucle While j'obtient le message d'erreur suivant
    Nom : EcranErreur.jpg
Affichages : 153
Taille : 43,9 Ko

    Merci pour vos conseils

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    le premier argument de vôtre format Format('%18d|%-35s|%-25s|'demande un entier %d or vous lui fournissez un string
    vous pourriez aussi l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    format('%18s         |%35s                    |%8.2f',[
    DataModule2.FDQueryMaitre.FieldByName('NomCpt').AsString,
    DataModule2.FDQueryMaitre.FieldByName('Banque').AsString,
    DataModule2.FDQueryMaitre.FieldByName('SoldeInit').AsFloat]);
    il faudrait aussi expliquer cette histoire de | et de #128 et les espaces ?

    Si vous avez besoin d'un longueur fixe pensez au -
    exemple pour le premier terme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format('%.28s|',[DataModule2.FDQueryMaitre.FieldByName('NomCpt').AsString])
    si je regarde le reste du code je pencherais pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      MemoComptes.Lines.Add(String.Format('%-20s|%-35s|%-25s|', [' Nom ', ' Banque ',  ' Solde Initial ']));
      // Ajouter une ligne au mémo pour chaque enregistrement de la table.
     
      while not DataModule2.FDQueryMaitre.Eof do
      begin
        MemoComptes.Lines.Add(String.Format('%-20s|%-35s|%23.2f|',
                 [DataModule2.FDQueryMaitre.FieldByName('NomCpt').AsString,
                  DataModule2.FDQueryMaitre.FieldByName('Banque').AsString,
                 FloatToStr(DataModule2.FDQueryMaitre.FieldByName('SoldeInit').AsFloat)]));
        DataModule2.FDQueryMaitre.Next;
      end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Il faut que tu fournisses un entier pour ton premier argument, c'est ce que tu as noté dans le formatage : "d"

    Essaye de remplacer par

    Edit : Fichtre, je n'ai pas été assez rapide pour répondre Sergio est très très véloce

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par blonde Voir le message
    Sergio est très très véloce
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Si vous avez besoin d'un longueur fixe pensez au .
    exemple pour le premier terme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format('%.28s|',[DataModule2.FDQueryMaitre.FieldByName('NomCpt').AsString])
    je que pour conserver une longueur fixe il faut utiliser le caractère "-"

    Doc :
    Un spécificateur de largeur définit la largeur de champ minimale pour une conversion. Si la chaîne résultante est plus courte que la largeur de champ minimale, elle est comblée par des espaces afin d'accroître la largeur de champ. Par défaut, le résultat est justifié à droite en faisant précéder la valeur d'espaces, mais si le spécificateur de format contient un indicateur de justification à gauche (un caractère tiret "-" précédant le spécificateur de largeur), le résultat est justifié à gauche par l'ajout d'espaces après la valeur.

  6. #6
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Bon, j'ai rien dit, je viens de tester, ça fonctionne

  7. #7
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Merci à tous pour vos réponses
    En effet j'avais oublié que c'était un entier le premier champ. J'était parti sur un select * From nom de ma table

    l'utilisation de | me permet de faire des séparations entre les ligne et #128 correspond à l'affichage du symbole Euro

    et je me suis ravisé que je ne voulais pas afficher l'index.

    Donc j'ai essayé est cela marche

    Merci pour vos précieuses réponses

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par gegila Voir le message
    #128 correspond à l'affichage du symbole Euro
    Ah, je n'avais pas vérifié, dans ce cas un %9.2m fera le nécessaire (sauf si bien sûr le poste est configuré pour un pays hors €uro )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Fonction Format() en SQL
    Par tomo0013 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 16/02/2007, 17h36
  2. [VBA E] fonction format Horaire
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/06/2006, 21h18
  3. Réponses: 5
    Dernier message: 13/02/2006, 13h59
  4. Fonction "Format" sous SQL
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 08/10/2004, 09h07
  5. fonction format
    Par billoum dans le forum ASP
    Réponses: 9
    Dernier message: 16/04/2004, 15h43

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