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 :

Problème en parcourant une dbgrid


Sujet :

Langage Delphi

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut Problème en parcourant une dbgrid
    Bonjour,

    Je fais un parcours des Forms pour récupérer certains infos de certains composants ainsi :
    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
    23
     
    var
    i,j,k:integer;
     
    begin
     for j := 0 to Application.ComponentCount -1  do
      If Application.Components[j] is TForm Then
        With Application.Components[j] as TForm do
        Begin
         For i := 0 to ControlCount-1 do
         begin
          if Controls[i] is Tlabel Then
          begin
          listbox1.Items.Add((Controls[i] as Tlabel).Caption);
         end;
     
         if  Controls[i] is TDBgrid Then
          begin
          LoopThroughDbgrid(components[i] as TDBgrid);
          end;
        end;
        end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure LoopThroughDbgrid(aGrid : TDBgrid) ;
    var
      j : integer;
    begin
      for j := 0 to aGrid.Columns.Count-1 do
          begin
          ListBox1.Items.Add(aGrid.Columns[i].Title.Caption);
        end;
     
    end;
    La difficulté est que je n'arrive pas à lire les title column de la dbgrid.
    Lorsque la fonction LoopThroughDbgrid est appelé dans le code le aGrid.Columns.Count est à zéro. Je ne sais pas si il manque quelque chose.
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Je vois une erreur dans le code : un composant n'est pas forcément un contrôle. Un contrôle est un composant visible et hérite de ce dernier. Ce code ne fonctionnera que tant que les composants seront tous des contrôles et qu'il seront référencés dans le même ordre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if  Controls[i] is TDBgrid then
    begin
      // Incorrect !
      // LoopThroughDbgrid(components[i] as TDBgrid);
      // Correct
      LoopThroughDbgrid(Controls[i] as TDBgrid);
    end;
    Ensuite, par souci d'optimisation, on peut améliorer le code en transtypant directement après avoir fait un test "is", plutôt que passer par "as".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for i := 0 to ControlCount - 1 do
    begin
      if Controls[i] is Tlabel then
      begin
        Listbox1.Items.Add(Tlabel(Controls[i]).Caption);
      end;
     
      if  Controls[i] is TDBgrid then
      begin
        LoopThroughDbgrid(TDBgrid(Controls[i]));
      end;
    --
    Philippe.

  3. #3
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Super !
    Merci Philippe

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Excusez-moi d'y revenir malgré que le post est résolu.
    Je n'arrive pas à récupéré le nom de la forme en rajoutant le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      if (Application.Components[i] is TForm) Then
          begin
          listbox1.Items.Add((Application.Components[j] as TForm).Name);
          end;
    Je veux dire dans un 1er temps il l' a récupère puis après c'est un List Index Out Bound

    Merci de votre aide.

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Je crois que vous êtes un éternel étourdi !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      if (Application.Components[i] is TForm) Then
        begin
          // Attention à l'index
          // listbox1.Items.Add((Application.Components[j] as TForm).Name);
          listbox1.Items.Add((Application.Components[i] as TForm).Name);
        end;
    --
    Philippe.

  6. #6
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    nom de ..... il faut que je m'arrête un peu
    On ne peux pas faire plusieurs choses à la fois.
    effectivement et c'est bien dit, je suis étourdi.
    Je vais me procurer une 3eme paire de lunette
    Merci encore Philippe et désolé pour ça.

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

Discussions similaires

  1. Problème avec parcours d'une ArrayList et Iterator
    Par Raiden1234 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 30/03/2008, 21h16
  2. Problème de déplacement dans une dbGrid
    Par marcootz dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/01/2008, 09h51
  3. Problème de scroll avec une dbGrid
    Par marcootz dans le forum C++Builder
    Réponses: 0
    Dernier message: 02/01/2008, 15h21
  4. Probléme de parcour d'une table
    Par rootdaoud dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2006, 13h24
  5. problème de refresh sur une DBGrid
    Par lidouka dans le forum Bases de données
    Réponses: 4
    Dernier message: 20/12/2005, 17h12

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