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

 Delphi Discussion :

Afficher un Record dans un Memo


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Afficher un Record dans un Memo
    Bonjour

    Alors, le titre est assez explicite mais voici le soucis dans les détails :
    Je doit faire un exercice où il me faut créer un annuaire de personnes dans un fichier .DAT (je sais c'est débile j'aurai fait un base données paradox si j'avais eu le choix).
    J'arrive à une étape où je dois afficher le contenu de mon fichier dans un mémo, ça parait simple mais j'y arrive pas... Mon fichier contient des records de type TPersonne (TPersonne contient : nom, prenom, age et email).

    Voici la déclaration du Type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Type TPersonne = Record
      nom    : string[20];
      prenom : string[15];
      age    : integer;
      email  : string[50];
    end;//fin type TPersonne
     
    ...
     
    Var//globales
    FAnnuaire : file of TPersonne;
    Voici la procédure du bouton qui doit afficher le contenu du fichier dans le memo :
    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
    20
    21
    22
     
    {===============================================================================
    Procedure   : BtnAfficher OnClick
    Description : Affiche le contenu du fichier
    ===============================================================================}
    procedure TForm1.BtnAfficherClick(Sender: TObject);
    begin
    assignFile(FAnnuaire, 'Annuaire.dat');
     
    if(FileExists('Annuaire.dat'))//on s'assure que le fichier existe
    then begin
         reset(FAnnuaire);//ouverture du fichier et positionnement au début
     
         while not Eof(FAnnuaire) do
         begin
         Read(FAnnuaire, Personne);//lecture : il faut OBLIGATOIREMENT un type
         MemContenu.Lines.Add(Personne);//ajout de la ligne courante dans le memo
         end;//fin while
     
         CloseFile(FAnnuaire);//fermeture du fichier
         end;//fin if
    end;//fin procedure
    Le problème c'est que j'ai une erreur de compilation : [Erreur] UAnnuaire.pas(137): Types incompatibles : 'String' et 'TPersonne'.
    J'avais déjà eu le cas de figure parce que je n'avais pas un type pour le read. Du coup j'avais fait une variable "ligne" de type TString25 et ça avait passé car il s'agissait d'une string (et le memo attend une string pour l'afficher).

    Merci beaucoup pour votre aide précieuse.

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par sic_88 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         MemContenu.Lines.Add(Personne);//ajout de la ligne courante dans le memo
    Le problème c'est que j'ai une erreur de compilation : [Erreur] UAnnuaire.pas(137): Types incompatibles : 'String' et 'TPersonne'.
    J'imagine que Personne est de type TPersonne.

    Donc, tu ne peux pas utiliser la procedure Add du mémo qui prends en argument une chaine de caractere, alors que Personne est un Record.

    2 solutions :
    - Tu te crées une procédure qui convertit ton Record en chaine de caractere
    - Tu ouvres ton fichier comme un fichier de caracteres (fichier texte) et tu l'écrit tel quel.

    Bonne chance

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    je remarque que tu n'arrives pas à bout d'un exercice basique que tu qualifies pourtant de "débile"...un peu d'effort ne te ferait pas de mal.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je remarque que tu n'arrives pas à bout d'un exercice basique que tu qualifies pourtant de "débile"...un peu d'effort ne te ferait pas de mal.
    L'exercice en lui même a une utilité, c'est simplement le fait de passer par un fichier .dat pour créer un annuaire que je trouve pas terrible.

    La solution était la suivante : pour afficher le record dans le memo, il faut le faire "éléments par éléments" (du record) par exemple :
    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
     
    if(FileExists('Annuaire.dat'))//on s'assure que le fichier existe
    then begin
         reset(FAnnuaire);//ouverture du fichier et positionnement au début
     
         while not Eof(FAnnuaire) do
         begin
         Read(FAnnuaire, Personne);//lecture : il faut OBLIGATOIREMENT un type
         MemContenu.Lines.Add(Personne.nom);//ajout de la ligne courante dans le memo : IL FAUT PRENDRE ELEMENTS PAR ELEMENTS
         MemContenu.Lines.Add(Personne.prenom);
         MemContenu.Lines.Add(IntToStr(Personne.age));
         MemContenu.Lines.Add(Personne.email);
         end;//fin while
     
         CloseFile(FAnnuaire);//fermeture du fichier
         end;//fin if
    Merci pour votre aide !

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Un exercice "débile" ?
    Tout dépend le thème, là par exemple, cela peut-être considéré comme la manipulation du fichier et des structures !
    Et proposer "Paradox" comme meilleure solution est peut-être pire !
    Vouloir appronfondir une technologie obselète depuis plus de 10 ans !

    Ce qui est débile, c'est de ne pas avoir fait un objet TAnnuaire qui gère de manière transparente une collection de TPersonne !
    Et de séparer le code métier de la présentation (la TForm), mais peut-être que la notion de MVC n'a pas encore été abordée en cours !

    Ce qui est débile encore, c'est de poser une question sans reflechir une seule seconde, la Methode Add du TStrings prend en paramètre une variable de type "string" comment pourrait-il savoir quoi faire d'un TPersonne


    Si nous étions en Java, si TPersonne était une class avec une méthode toString(), la conversion aurait été automatique, mais la c'est du Delphi !

    Sinon, un étudiant ne devrait jamais avoir recours à l'aide d'un forum pour une simple et unique raison : l'important pour un étudiant n'est pas de faire mais d'apprendre à faire !
    Si il n'a pas le niveau, soit il redouble, soit il change de cursus !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Salut Shail

    Un exercice "débile" ?
    Tout dépend le thème, là par exemple, cela peut-être considéré comme la manipulation du fichier et des structures !
    Et proposer "Paradox" comme meilleure solution est peut-être pire !
    Vouloir appronfondir une technologie obselète depuis plus de 10 ans !
    L'exercice est effectivement un exercice de manipulation de fichier à accès direct (.dat). Il a donc un intérêt dans ce sens : une fois de plus, ce n'est pas le but de l'exercice que je remet en question, mais l'utilisation d'un fichier, là où une base de donnée serait, à mon avis, plus adaptée (mais bon, l'exercice est l'exercice et il n'est pas dénué de tout intérêt). Qui plus est, j'ai estimé que "Paradox" pourrait être une solution plus adaptée à la situation introduite par l'exercice car c'est la seule manière d'utiliser une base de données en Delphi que je connaisse.

    Ce qui est débile, c'est de ne pas avoir fait un objet TAnnuaire qui gère de manière transparente une collection de TPersonne !
    Et de séparer le code métier de la présentation (la TForm), mais peut-être que la notion de MVC n'a pas encore été abordée en cours !
    Je suis un débutant en Delphi, en programmation de manière globale. En tant que tel, ce que tu cites ne me parle pas, pour la simple raison que je ne l'ai effectivement jamais abordé.

    Ce qui est débile encore, c'est de poser une question sans reflechir une seule seconde, la Methode Add du TStrings prend en paramètre une variable de type "string" comment pourrait-il savoir quoi faire d'un TPersonne
    Je sais, à présent, que la méthode "add" visant l'ajout d'une ligne à un memo attend une string, que j'essayais d'y entrer un record et que par voie de fait ça ne marcherait pas. Mais ce n'est pas pour autant que j'avais la solution quand j'étais bloqué dans mon code. C'est pour cette raison que j'ai eu, une fois de plus, recours à cet excellent forum qui m'a sorti de situations bloquantes plus d'une fois !

    Sinon, un étudiant ne devrait jamais avoir recours à l'aide d'un forum pour une simple et unique raison : l'important pour un étudiant n'est pas de faire mais d'apprendre à faire !
    Si il n'a pas le niveau, soit il redouble, soit il change de cursus !
    A mon sens, tout moyen permettant de progresser est positif. Je ne vois donc pas pourquoi utiliser un forum devrait être proscrit pour les étudiants. Je pense justement que ça peut leur être fondamentalement utile pour "savoir-faire", car c'est bien en faisant qu'on peut être capable de savoir-faire par la suite. Avancer qu'un étudiant qui utilise un forum doit changer de cursus ou redoubler me semble condescendant.

    Quoi qu'il en soit, j'apprécie ce genre d'échange de points de vues, mais je crois que ça ne rend service à personne dans cette section du forum.

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

Discussions similaires

  1. [D2010] afficher UTF-8 dans un memo ou autre
    Par charlyoleg dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2012, 12h06
  2. Réponses: 3
    Dernier message: 14/07/2008, 10h02
  3. Réponses: 2
    Dernier message: 07/02/2006, 20h42
  4. afficher de l'hébreu dans un memo (base ACCESS)
    Par nicassy dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/11/2005, 16h15
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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