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 :

Affecter des enregistrements


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut Affecter des enregistrements
    Salut!

    Dans mon programme, j'ai déclaré des enregistrements du genre :
    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
    Type
      TAgenda = Packed Record
        nom: String[40];
        prenom: String[20];
        adresse: String[40];
        date: String[20];
        tel: String[30];
        fax: String[30];
        mail: String[30];
        note: Integer;
      End;
     
      TRepertoire = Packed Record
        liste1: TAgenda;
        liste2: TAgenda;
        liste3: TAgenda;
        perso: TAgenda;
        pro: TAgenda;
        divers: TAgenda;
      End;
     
    Var Rep1, Rep2: TRepertoire;
    J'ai besoin de comparer 2 variables de type TRepertoire, de modifier les éléments de ces variables, etc... Le problème est que je ne vois pas comment faire pour ne pas avoir des fonctions super longues, avec une ligne de code par enregistrement de TRepertoire, ou pire, une fonction pour chaque enregistrement de TAgenda... Par exemple, pour comparer 2 variables de type TRepertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fonction IsEgalRep(R1, R2: TRepertoire): Boolean;
    Begin
      Result := (R1.liste1.nom = R2.liste1.nom) And
                (R1.liste1.prenom = R2.liste1.prenom) And
                (R1.liste1.adresse = R2.liste1.adresse) And
    ...
    Le problème est aussi si un jour j'ai besoin de modifier mes types, ajouter ou supprimer un nouvel enregistrement, je devrais reprendre tout le code. Bref, auriez-vous une méthode à me proposer pour simplifier l'accès aux données ?
    Peut-être en utilisant les Class si ça n'est pas possible avec des enregistrements...

    Merci d'avance.

    ps: Ne tenez pas compte des noms d'enregistrements utilisés, il s'agit d'un exemple, mon programme n'est pas un agenda..

  2. #2
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bonjour,

    Un Record c'est une grille de lecture d'un ensemble d'octets.
    Alors change ta grille et compare directement un record avec un autre en le castant avec ta nouvelle grille.

    a+

  3. #3
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Pourrais-tu utiliser mon code d'exemple pour illustrer ta proposition stp ?
    A quoi ressemblera le code de la fonction IsEgalRep ?
    Et comment accèdes-tu / redéfinis-tu les données avec une fonction ?

  4. #4
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Bien je m'explique, si tu prends deux photos et que tu les regardes au travers d'une passoire tu doit comparer celles-ci trous par trous.

    Alors enlève la passoire.

    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
     
     TAgenda = Packed Record
        nom: String[40];
        prenom: String[20];
        adresse: String[40];
        date: String[20];
        tel: String[30];
        fax: String[30];
        mail: String[30];
        note: Integer;
      End;
     
    { TCompareAgenda = Packed Record
        Ensemble : String[40 + 20 + 40 + 20 + 30 +30 + 30 + SizeOf(integer)] ;
      End;}
     
     TCompareAgenda = Packed Record
        Ensemble : String[212] ;
      End;
    Ta fonction devient plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Fonction IsEgalRep(R1, R2: TRepertoire): Boolean;
    Begin
      Result := TCompareAgenda(R1.liste1).ensemble = TCompareAgenda(R2.liste1).ensemble;
    end;
    j'ai tapé le code sans ctrl.

    a+

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Bien, tout d'abord, je te remercie pour ton explication et ta patience. Je me suis mal expliqué. Je rappel que je dois accèder à tous les champs. La fonction de comparaison n'est qu'un exemple type. D'ailleurs, si j'utilise ton code, la fonction IsEgalRep possèdera combien de ligne de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Fonction IsEgalRep(R1, R2: TRepertoire): Boolean;
    Begin
      Result := 
        TCompareAgenda(R1.liste1).ensemble = TCompareAgenda(R2.liste1).ensemble And
        TCompareAgenda(R1.liste2).ensemble = TCompareAgenda(R2.liste2).ensemble And    
        TCompareAgenda(R1.liste3).ensemble = TCompareAgenda(R2.liste3).ensemble And
        TCompareAgenda(R1.perso).ensemble = TCompareAgenda(R2.perso).ensemble And 
        ...
    end;
    Je rappelle que le code que j'ai donné est un exemple type de la structure que je cherche à obtenir (enregistrements imbriqués). Seulement, imagine que mon enregistrement comporte 200 éléments différents... et que son type comporte lui aussi 200 éléments... La fonction IsEgalRep possèdera combien de ligne de code ?

    Ce que je recherche avant tout, c'est une façon simple d'accèder à des données, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Procedure GetValue(Var obj; Rep: TRepertoire; Ag: TAgenda; Index: Integer);
    Begin
      obj := Rep.Ag.TAgenda(Index);
    End;
     
    Function SetValue(Var obj; Rep: TRepertoire; Ag: TAgenda; Index: Integer);
    Begin
      Rep.Ag.TAgenda(Index) := obj;
    End;
    Peut-être existe-t-il une solution avec les Classes...

  6. #6
    Membre chevronné Avatar de Bejaia-In
    Inscrit en
    Avril 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 365
    Par défaut
    Pourquoi ne pas ajouter un champ pour identifier de façon unique chaque enregistrement et ne faire de recherche que sur celui-ci ?
    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
    Type
      TAgenda = Packed Record
        Identificateur : integer;
        nom: String[40];
        prenom: String[20];
        adresse: String[40];
        date: String[20];
        tel: String[30];
        fax: String[30];
        mail: String[30];
        note: Integer;
      End;
    
      TRepertoire = Packed Record
        Identificateur : integer;
        liste1: TAgenda;
        liste2: TAgenda;
        liste3: TAgenda;
        perso: TAgenda;
        pro: TAgenda;
        divers: TAgenda;
      End;
    ...ou est-ce je tape à côté ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/11/2010, 14h34
  2. Affecter une couleur à des enregistrements
    Par codial dans le forum Bases de données
    Réponses: 21
    Dernier message: 17/09/2009, 16h14
  3. Réponses: 12
    Dernier message: 24/01/2006, 12h38
  4. Réponses: 3
    Dernier message: 29/12/2003, 13h47
  5. Enlever tous les M&Mme des enregistrements
    Par marc olivier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/07/2003, 12h24

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