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 :

Treeview et tables avec 2 champs Père et fils


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    ingeneer
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ingeneer

    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Treeview et tables avec 2 champs Père et fils
    Treeview et tables avec 2 champs Père et fils
    Bonjour a tous
    J’ai une table avec 2 colonnes : 1 colonne Père et 2eme colonne fils
    Je veux afficher pour un enregistrement sélectionné de ma table un Treeview
    Le problème ce que un fis peut être « le père » de plusieurs autre fils.
    Si vous avez une nouvelle proposition concernant la structure de ma table, je suis preneur.
    Ci-joint un bout de code qui ne marche pas.

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Node: TTreeNode;
    begin

    TreeView1.Items.Clear;;
    TreeView1.items.BeginUpdate;
    Node:= treeview1.items.AddObject(nil , neq.Text, Lquery.GetBookmark);
    //neq : un champ DBedit qui contient le père de l'enregistrement courant
    ajoutnode(treeview1, node, neq.Text);
    TreeView1.items.Endupdate;

    end;

    function TForm1.Ajoutnode(Sender: TTreeView; node:TTreeNode; stext : String):string;

    begin
    Lquery.SQL.Clear;
    Lquery.SQL.Add('select * from ensemble where pere=:cpere;');
    Lquery.Parameters.ParamByName('cpere').Value:=stext;
    Lquery.Open;
    while not Lquery.Eof do
    begin
    node :=Sender.items.AddChildObject(node,Lquery.Fields[1].AsString,Lquery.GetBookmark);
    stext:=Ajoutnode(Sender,node,Lquery.Fields[1].AsString);
    Lquery.Next;
    end;
    end;

    Merci d’avance de votre collaboration

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Ton problème doit être l'utilisation d'un seul Lquery global au d'en faire un local et de créer pour chaque requête, c'est obligatoire dans un algo en récursivité !

    Deplus tes bookmark seront faux si tu ne stocke pas le dataset associé ...

  3. #3
    Membre à l'essai
    Profil pro
    ingeneer
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ingeneer

    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Je n'arrive pas à créer un Local query
    J'ai essayé de créer un ADOQuery local dans mon procédure recurssive, mais j'ai eu des problèmes avec "dépassement de pile" a l'exécution.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Je ne vois pas pourquoi, mais bon ... tu peux donc aussi, recopier le contenu de la query dans une TStringList locale, et tu parcours ensuite cette liste pour la récursivité ...

  5. #5
    Membre à l'essai
    Profil pro
    ingeneer
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ingeneer

    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 14
    Points
    14
    Par défaut J'ai reussi enfin à créer le TADOQuery en local
    La solution était bien la création d'un TADOQuery en local c.a.d dans la procédure récursive
    Merci à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
     Squery:TADOQuery;
     thisnode:TTreenode;
    begin
       SQuery := TAdoQuery.Create(nil); //Cette étape qui m'a echappé
       Squery.Connection :=DMD.ADOM;
       ....

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

Discussions similaires

  1. [Requête] creation de table avec un champ auto incrementé
    Par lucke_34 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 30/04/2020, 23h18
  2. fusion de table avec un champ en commun
    Par chamoix dans le forum Access
    Réponses: 3
    Dernier message: 13/12/2006, 23h18
  3. [D7],[ADO] : ordonner une table avec des champs référencés
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2006, 21h36
  4. Réponses: 7
    Dernier message: 14/02/2006, 10h33
  5. Jointure de 3 tables avec un champ commun
    Par desperado007 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/08/2005, 15h35

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