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 :

[TCollection] Sauvegarde dans un fichier puis récupération avec son ID


Sujet :

Langage Delphi

  1. #1
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut [TCollection] Sauvegarde dans un fichier puis récupération avec son ID
    Je me creuse le ciboulot sur un autre problême :
    j'ai deux collections (dérivées TCollection).
    Chaque Item de ma 1ère collection référence un Item de ma 2ème collection via le un champ RefID (integer) qui correspond au ID de l'item correspondant.

    Maintenant j'aimerais pouvoir sauver dans 2 fichiers séparés, mes deux collection, de telle façon que je puisse, lors d'une autre session de travail, récupérer mes collections en gardant les ID de mes items de ma deuxième collection tels qu'ils étaient auparavant (afin que mes "liens" fonctionnen encore).

    Pour ça, j'ai trouvé une solution qui permet de sauvegarder les composants collection eux même via la méthode TStream.SaveComponent.
    Ce que j'aimerais plutot, c'est d'enregistrer mes collections dans des fichiers typés en utilisant que les propriétés "données" qui me sont réellement utiles de mes Items afin de pouvoir
    1) traiter les données des collections item au cas par cas lors d'enregistrement ou chargement.
    2) pouvoir utiliser les données de mes fichiers dans une autre application

    Merci

    Je tourne en Delphi 7
    Bidouilleuse Delphi

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Est-ce que ton ID correspont à son Index dans la liste? Si oui, alors tu crées ton fichier en enregistrant un par un tes CollectionItem. Puis en les chargeant, tu les crées dans l'ordre dans lequel il les lit, ça ne devrait pas poser de problème...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut,
    Hé bien non, pas forcément !

    ID correspond à la propriété ID du CollectionItem qui est en lecture seule (c'est là où le bas blesse).
    C'est un integer qui identifie de façon unique les items de la collection (voir aide Delphi).

    en fait, c'est une sorte de champ autoincrémenté...

    donc, quand tu ajoutes un item (TCollection.add), une ID unique est générée et pour l'Item par delphi (tant que tu ajoutes depuis une collection vide au départ, ID=index)
    quand tu supprimes un item de la collection, les items qui se trouvent après l'item que tu viens de supprimer changent d'index mais pas d'ID.

    Quand tu rajoutes alors un item à ta collection item tu obtient index=ID-1

    concrètement, voici une collection obtenue à partir de rien (on a ajouté les item à partir d'une collection vide) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Nom         index         ID
    ----------------------------
    itemA            0          0
    itemB            1          1
    itemC            2          2
    itemD            3          3
    itemE            4          4
    itemF            5          5
    On supprime ItemC avec TCollection.delete(2), on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Nom         index         ID
    ----------------------------
    itemA            0          0
    itemB            1          1
    itemD            2          3
    itemE            3          4
    itemF            4          5
    On ajoute ItemG avec TCollection.Add, on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Nom         index         ID
    ----------------------------
    itemA            0          0
    itemB            1          1
    itemD            2          3
    itemE            3          4
    itemF            4          5
    itemG            5          6
    Eventuellement, on insère ItemH avec TCollection.insert(3), on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Nom         index         ID
    ----------------------------
    itemA            0          0
    itemB            1          1
    itemD            2          3
    itemH            3          7
    itemE            4          4
    itemF            5          5
    itemG            6          6
    Dans mon fichier, je vois bien comment sauver ID, mais pour recréer ma collection à partir d'une collection vide, étant donné que ID est en lecture seule, je ne vois pas...

    C'est vrai qu'utiliser index à la place de ID est plus facile dans pour la sauvegarde et la restitution à partir de mon fichier typé, mais étant donné que l'index des items peut changer suite à la suppression d'un seul item de la liste, je ne vois pas comment gérer les liens RefID de ma première collection...

    C'est l'histoire du serpent qui se mord la queue !
    Bidouilleuse Delphi

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/03/2013, 18h55
  2. Réponses: 2
    Dernier message: 07/04/2007, 11h29
  3. Réponses: 12
    Dernier message: 14/06/2004, 13h06
  4. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05
  5. Réponses: 3
    Dernier message: 19/05/2004, 08h58

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