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 :

Help me TCollection TcollectionItem ou objectlist


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Help me TCollection TcollectionItem ou objectlist
    bonjour, Mon probleme :
    je dois realiser un objet de type
    Pays 1
    Nom pays
    Departement 1
    Nom depart
    Ville 1
    Ville 2
    Nom ville
    Personne 1
    Nom Personne
    ....
    Departement 2
    Pays 2

    j'arrive a realiser le premier niveau : Pays qui possede des
    departement
    mais je n'arrive pas a implementer le faites que depart possede une ou
    plusieurs villes

    quelqu'un aurait une idée ou un morceau de code qui pourrait me servir
    ? merci

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Pour faire simple, on peut utiliser des tableaux de villes et de nom de ville.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Type TMyObj = class(Tobject)  
         Ville1 : array of string ;
         end ;
    var MyObj: TmyObj. 
    begin
    ...
    Nombre_de_villes:=nnn ;
    setlength(myObj.ville1,Nombre_de_villes) ;
    Pour faire logique, il faudrait créer un objets de type "Ville" et mettre dans l'objet de premier niveau "TmyObj" la liste des villes (Tlist).
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    merci de la reponse,
    mais cela ne peut pas fonctionner pour le fonctionnement de mon application, le probleme avec les tableaux dynamiques c'est qu'ils prennent de la mémoire de facon exponentielle.
    Lorsque vous obtenez un niveau d'enregistrement dynamique qui touche les 20000 enregistrement ca prend beaucoup trop de memoire.

    pour info ma structure actuelle (Record avec plusieurs tableaux dynamiques de differents niveau et sous niveaux) pour 1500 enregis cela prend 26ko par enregistrement et vers 10000 on atteint deja 46ko par enregistrement, c'est beaucoup trop lourd d'ou l'utilisation judisieuse de la rogrammation objet qui utilise les pointeurs plutot que la structure.

    c'est pour cela que je m'oriente vers des collection item.

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Dans les 2 cas, collection d'objets ou tableaux dynamiques, l'occupation mémoire sera semblable, si la dimension des tableaux ou des collections est ajustée au nombre d'élements réélement présents.

    Pour faciliter le debug des collections, je suggére l'utilisation de tstringlist.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var Villes_tsl : Tstringlist ;
    ....
    Villes_tsl:=Tstringlist.create ; 
    Ville:=Tville.create ;
    Ville.name:='TOULOUSE' ;
    Ville.codePostal:='33000' ;
    ...
    Villes_tsl.addObject('xxx '+Ville.name,Ville) ;
    ...
    // utilisation de la dernière ville de la liste 
    Showmessage(Villes_tsl[i]+' CodePostal : '+Tville(Villes_Tsl.objects[VilleTsl.count-1]).codePostal) ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    merci.
    mais je ne sais pas comment adapter ce code a ma situation
    je dois avoir ceci

    Profil[] = 'PERSONNE'
    Propriete : ID, libelle, pere
    Entite[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    Attribut n°2 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    .....
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    RELATION[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF

    Attribut n°2 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD

    Entite[] N°2
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    Attribut n°2 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    .....
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    RELATION[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF

    Attribut n°2 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD


    Profil[] = 'VEHICULE'
    Propriete : ID, libelle, pere
    Entite[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    RELATION[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF
    Entite[] N°2
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    Attribut n°2 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    .....
    Attribut n°n : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    RELATION[] N°1
    Attribut n°1 : ID, TYP_LBL, TYP_ID, TYP_DON, CLASSIF, HACHiD
    CARACTERISTIQUES ATTRIBUTS : ID, LBL, HACH, CLASSIF



    ceci est le resultat d'une requete issue d'une Méta table issue d'une meta BASE

    le nbr d'attribut de la relation est dynamique, mais les caracteristiques de la relation est identiques pour une relation type

    le nbr d'attribut d'une entite depend de son profil

    lorsque l'on a quelque milliers de relation pour une entite particuliere l'emploi de tableau dynamique ne se prette pas du tout
    d'ou la structure en collection mais je bloque tjs pour les sous niveaux

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Je ne suis pas vraiment sur d'avoir compris.

    Si il y a pour un "Profil" un nombre variable de "Relations" et pour chaque "Relation" un nombre variable d'attribut, on définira les 3 objets :
    - Tprofil,
    - Trelation,
    - Tattribut.

    TProfil contiendra une Tlist(ou une Tstringlist) de relations (appelons-la Relations_tsl).
    TRelation contiendra une Tlist(ou une Tstringlist) d'attributs (appelons-la Attributs_Tsl).
    Pour accéder à l'attribut y de la relation x du Profil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attrib:=Tattribut(Trelation(Profil.Relations_Tsl.objects[i]).Attributs_Tsl.objects[j])
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    bonjour
    je vais essayer d'eclairer un peu mon pb

    ce que j'ai :

    <profil ID="1" PERE="0" LIBELLE="PERSONNE">
    <entite ID="1" CLASSIF="NC" HACH_ID="NC">
    <caracteristiques>
    <icone><defineproperties>...</defineproperties></icone>
    <avatar><defineproperties>...</defineproperties></avatar>
    </caracteristiques>
    <attributs>
    <ATTR SEQ="1" TYP_ATT_ID="1" TYP_ATT_LBL="NOM" LIB_ATT_ID="11" LIB_ATT_LBL="TOTO"/>
    <ATTR SEQ="2" TYP_ATT_ID="1" TYP_ATT_LBL="PRENOM" LIB_ATT_ID="1" LIB_ATT_LBL="NC"/>
    </attributs>
    <relations ID="1" LIBELLE="APPEL" DESTINATION="12" CLASSIF="NC" HACH_ID="NC">
    <caracteristiques>
    <ATTR SEQ="1" TYP_ARG_ID="1" TYP_ARG_LBL="DATEDEB" LIB_ARG_ID="11" LIB_ARG_LBL="NC"/>
    <ATTR SEQ="2" TYP_ARG_ID="1" TYP_ARG_LBL="DATEFIN" LIB_ARG_ID="1" LIB_ARG_LBL="NC"/>
    </caracteristiques>
    </relations>
    <relations ID="2" LIBELLE="APPEL" DESTINATION="21" CLASSIF="NC" HACH_ID="NC"></relations>
    </entite>
    <entite ID="21" CLASSIF="NC" HACH_ID="NC"/>
    <entite ID="12" CLASSIF="NC" HACH_ID="NC"/>
    </profil>
    <profil ID="2" PERE="0" LIBELLE="VEHICULE">
    <entite ID="15" CLASSIF="NC" HACH_ID="NC"/>
    <entite ID="25" CLASSIF="NC" HACH_ID="NC"/>
    <entite ID="32" CLASSIF="NC" HACH_ID="NC"/>
    </profil>


    profil --> entite(s) --> attributs
    ........ --> relation(s) --> caracteristiques


    une meme relation possede tjs les memes caracteristiques identifiantes mais des valeurs propres

    les entites possedent elles aussi des identifiant identique mais des valeurs propres

    le nombre et les valeurs d'attribut pour une entite d'un profil "A" sera different du profil "B"

    si tu pouvait ettayer ton exemple, d'avance merci.

    j'aime bien ton code quoi que pour moi il faut que j'essaye de le mettre en oeuvre dans un pti exemple car j'ai du mal a le saisir.

    une fois que j'aurais reussi a creer une bonne structure de donnees je pourrais modifier mon prog qui est une copie fonctionel de VISIO ou ANALYSTE NOTEBOOK (sauf que pour le moment je ne peut dessiner que 4000 elements sinon j'ai le contexte graphique qui pleure)



    je developpe depuis plusieurs années en delphi mais jamais de veritable prog objet (manque de connaissance)

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    La structure de données qui pourrait correspondre correspond à celle-ci.
    A noter que si une structure arborescente convient, un composant XML peut faire l'affaire.
    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
    Type 
     TProfil = class(Tobject)
       entites : tstringlist ; 
       end ;
     Tentite = Class(Tobject) ;
       carateristiques :  tstringlist ;
       attributs : tstringlist ;
       relations : tstringlist ; 
       seq : integer;
       Typ_att_id : integer ;  
       Typ_att_lbl: string ;
       ...
       end ;
     Trelation = Class(Tobject) ;
       caracteristiques :  tstringlist ;
       ...
       end ;   
     Tcaracteristique = Class(Tobject) ;
       attributs :  tstringlist ;
       ...
       end ;
    Lorsqu'un élement ne contient qu'une seule collection on peut simplifier un peu en faisant hériter l'objet d'une tstringlist.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    merci de tes reponses, je vais tester ta solution durant mes congés.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2003, 16h20
  2. help please
    Par atom267 dans le forum CORBA
    Réponses: 2
    Dernier message: 24/01/2003, 10h41
  3. [Kylix] fichiers help kylix2 oe ??
    Par sdoura2 dans le forum EDI
    Réponses: 2
    Dernier message: 29/11/2002, 14h32
  4. Help :Problème de clignotement
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/08/2002, 10h53
  5. Help InnoSetup ou Installshield
    Par buzz dans le forum Outils
    Réponses: 4
    Dernier message: 30/07/2002, 15h26

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