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

Langage Delphi Discussion :

[ structure ] record et evolution


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    743
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 743
    Points : 500
    Points
    500
    Par défaut [ structure ] record et evolution
    Bonjour a tous , je vais commencer un projet et je reflechi sur la structure a mettre en oeuvre sur un fichier de données .

    Mon projet est basé sur un fichier qui possede toutes les informations adequate. Ces données sont de tout types ( string , real , array... ).

    Les fichiers de type texte sont a proscrire pour eviter de pouvoir les modifier facilement avec un quelconque editeur.

    Je suis donc parti sur la creation d'un type enregistrement ( record ).
    qui est a mon gout simple et pratique a utiliser ..

    Je me trouve devant un probleme , mon enregistrement doit pouvoir evoluer dans le temps ( pas dans le contenue des champs , mais par le nombre de champs qui compose l'enregistrement ).

    Mais la modification de ma structure , m'empeche de relire mon fichier d'origine ( avant la modif de la structure ) et impose de le recreer ! ( ce qui est genant car il y a beaucoup de données environ 2000 )

    Y a t il un moyen d'eviter ce probleme ?

    La seule solution que j'ai trouvé c'est de travailler avec deux structure a chaque modification je recharge mes données avec l'ancienne et les sauvent avec la nouvelles !!

    Je voudrais savoir si il existe une autre solution ou si il existe il d'autres structures plus adaptées ?

    merci pour vos subjections !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 184
    Points : 149
    Points
    149
    Par défaut
    Enregistre ta structure dans le fichier même au tout début

    En fait tu dois simplement écrire au début du fichier ce à quoi les données suivantes correspondent.

    Il y a plusieurs façons d'y arriver mais en principe c'est ce que tu dois faire.

    Enfin, c'est ce que je ferais

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut

    Une idée : Retour au fichier texte et cryptage.

    Le problème de l'évolution des structures de fichiers n'est pas nouveau, c'est en partie pour cela que l'on utilise des bases de données.

    Tu peux ajouter en entête des infos de version, cela t'impose de conserver au sein d'une version de ton programme toutes les routines permettant de relire les anciennes versions de tes fichiers. Cette approche, de prime abord, ne peut pas être mise en oeuvre avec des fichiers typés.

    Mais si tu définis un Record avec variante en prenant le numéro de version comme discriminant. Tu peux ainsi reprendre l'idée du haut en conservant une approche fichiers typés :

    Rappel (enreg. avec variante) repris dans l'aide en ligne et aménagé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      TPersonne = record
      Prenom, Nom: string[40];
      Naissance: TDate;
      case version: Byte of
        0: (LieuNaissance: string[40]);
        1: (Pays: string[20];
                LieuEntree: string[20];
                DateEntree, DateSortie: TDate);
      end;
    Cela consomme un peu plus de disque et peut rendre ta structure rapidement incompréhensible au fur et à mesure de ses évolutions, mais c'est un choix.

    Méfie-toi quand même des record car tu ne maîtrise pas la façon dont les données sont enregistrées (pense à la possibilité de reprise de données si ton fichier devient corrompu). Tu devrais tenter d'ouvrir tes fichiers avec notepad et voir si le contenu est vraiment illisible.

    Autre aspect : je ne suis pas certain que les différentes versions de Delphi enregistrent les données de fichiers typés de la même façon.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Pourquoi ne pas utiliser une base de données ??

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    743
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 743
    Points : 500
    Points
    500
    Par défaut
    porquoi pas une base de donnée !

    oui en effet , parceque je me suis jamais penché sur ces methodes , peut etre qu'il serait temps !!

    je vais aussi regarder les fichiers texte crytés !

    en tout cas merci pour vos idées !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Citation Envoyé par petitcoucou31
    porquoi pas une base de donnée !

    oui en effet , parceque je me suis jamais penché sur ces methodes , peut etre qu'il serait temps !!
    il est jamais trop tard pour bien faire

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Personellement j'utilise comme base de données Mysql , c'est gratuit et c'est puissant. Toute ma boite tourne avec ça. Si t'as besoin d'aide pour la mise en oeuvre n'hésite pas a m envoyer un message privée.
    www.mysql.com

  8. #8
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    Bonjour tt le monde ,
    J'ai eu le meme probleme moi aussi , mais moi j'ai une base de données

    Alors est-il possible d'ajouter de nouveaux champs à une base (ex aradox) slt par programmation ????
    Where is my mind

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    en mysql c est possible ... je suppose que ça doit l etre aussi en paradox

  10. #10
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Aprés au lieu de creer un nouveau champ a chaque fois , pourquoi na pas utiliser une base de données a structure dynamique. Je m'explique, habituellement une base de données a une structure statique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              |Champ 1|Champ 2|Champ X|
    Ligne 1|   A           B
    Ligne X|   C           D
    Si on veut rajouter une nouvelle données on est obligé de rajouter un champ, chose qui est compliqué et qui peut obliger à reconstituer l'index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              |Valeur    |Champ variable|
    Ligne 1|    A       | Champ 1         |         
    Ligne X|    B       | Champ 2         |

    Avec cette structure il suffit de donner une nouvelle valeur a la colonne champ variable pour faire comme si on rajouter une colonne. Le désavantage c est que la table prend beaucoup plus de ligne, les requetes deviennent plus compliqué et si elles ne sont pas optimisé plus lente.

    Pour conclure je dirais qu il faut vraiment réfléchir a ce que va faire la table pour bien la structuré et l'optimiser, il peut etre parfois préférable de faire plusieur table, qu'une seule grosse.

  11. #11
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    MessagePosté le: Jeu Oct 27, 2005 17:03 Sujet du message:
    [...]
    Pour conclure je dirais qu il faut vraiment réfléchir a ce que va faire la table pour bien la structuré et l'optimiser, il peut etre parfois préférable de faire plusieur table, qu'une seule grosse.
    Il est souvent préférable de segmenter les datas en plsieurs table afin d'éviter les redondances d'informations et toutes les erreurs qui peut en découler. vive Merise ;-)

  12. #12
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    Citation Envoyé par rvzip64
    en mysql c est possible ... je suppose que ça doit l etre aussi en paradox
    Justement , je travaille avec Delphi 7 (Entrep.) et je voudrais savoir coment on fait pour créer des champs par programmation (Procedures et fonctions ) ,je sais qu'on peut créer des Tables par code ,si quelqu'un connait le truc ...
    Ton code rvzip64 est une solution , mais ça a l'air compliqué
    d'autant plus que je perd la facilité qu'introduit Delphi pour l'affichage des données par l'intermediaire des DataSource et autres ...
    merci
    Where is my mind

  13. #13
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Oui en effet avec mon code, tu es obligé de retravailler les données pour les afficher.

  14. #14
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Justement , je travaille avec Delphi 7 (Entrep.) et je voudrais savoir coment on fait pour créer des champs par programmation (Procedures et fonctions ) ,je sais qu'on peut créer des Tables par code ,si quelqu'un connait le truc ...
    Un bon point de départ :
    CreateTable

    Pour compléter ce que disait rvzip64 au sujet des "champs variables", je pense que c'est une technique utile, mais seulement de manière marginale, par exemple dans le cadre d'une table CLIENTS pour des données relativement informelles, qui concerneont 1 client sur 30 et sur lesquelles je n'aurai jamais (ou presque) à faire des recherches.
    Tout ce qui est d'usage fréquent a intérêt à disposer d'un champ spécifique.
    Roland

  15. #15
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    évitez de vous greffer sur des post en cours, on a peu de mal ensuite à s'y retrouver

    Une question un post.
    Merci.

  16. #16
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Salut,
    évitez de vous greffer sur des post en cours, on a peu de mal ensuite à s'y retrouver
    Désolé de continuer à m'acharner sur ce post ...


    Citation Envoyé par rsc
    Un bon point de départ : F1
    CreateTable
    En fait , je me suis mal fait comprendre . Je ne veux pas créer une nouvelle table , mais ajouter des champs à une table déja éxistante sans en écraser les données y éxistantes .
    Where is my mind

Discussions similaires

  1. Non affichage du 1er caractère structure record
    Par zano42 dans le forum Langage
    Réponses: 11
    Dernier message: 03/12/2009, 17h22
  2. probleme structure Record
    Par vitch8 dans le forum Langage
    Réponses: 7
    Dernier message: 26/03/2009, 13h06
  3. [BDS2006Win32] Comparaison de structure record
    Par edrin17 dans le forum Débuter
    Réponses: 6
    Dernier message: 24/08/2007, 20h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 18h10

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