Tree aufbauen



  • Hallo,

    ich hab in der Datenbank diese Feldstruktur:
    Parent, Entry, Key

    Die Daten sind unsortiert und die Tiefe des Trees ist nicht begrenzt. Ich mein damit Parent->Child->Child->...Child

    Parent Entry Key
    root Text1 Eintrag1
    Eintrag1 Text2 Eintrag2
    Eintrag2 Text3 Eintrag3
    Eintrag3 Text4 Eintrag4
    root Text5 Eintrag6
    Eintrag6 Text6 Eintrag7
    Eintrag7 Text7 Eintrag8
    Eintrag8 Text8 Eintrag9
    Eintrag1 Text9 Eintrag10

    Aber ich hab Schwierigkeiten das nun umzusetzen. Wer kann mir einen Tip geben ?



  • Hallo

    Wo ist dein Problem? 😕

    bis bald
    akari



  • Query1: Alle Datensätze mit Parent = root
    Query2: Alle Datensätze, bei denen Parent = Query1->Entry ist
    Query3: Alle Datensätze, bei denen Parent = Query2->Key ist

    Nur der letzte Schritt müsste ja n-mal wiederholt werden, denn ich weiß die Anzahl der Childknoten vorher nicht.



  • Hallo

    Du könntest dieses Zusammenbauen rekursiv machen, was aber bei einer unbekannten (sprich potentiel sehr großen) Tiefe das Risiko eines Stacküberlaufs beinhaltet.

    Das läßt sich aber auch iterativ lösen. Und eventuell wäre es auch sinnvoll erstmal alle Datensätze in einem Rutsch in den Speicher zu laden, bevor du sie auswertest. Die Auswertung im Speicher ist dannn schneller als ständige Abfragen auf die Datenbank.

    bis bald
    akari



  • Hallo,

    in dem Zusammenhang noch eine Frage. Beim Klick in den Tree ist diese Routine:

    TPoint P = Mouse->CursorPos;
       P = objTree->ScreenToClient(P);
    
       THitTests HT = objTree->GetHitTestInfoAt(P.x,P.y);
       TNodeAttachMode AttachMode;
    
       TTreeNode *pItem = objTree->GetNodeAt(P.x,P.y);
       if (HT.Contains(htOnItem) || HT.Contains(htOnIcon))
       {
          sText = objTree->Selected->Text;
          txtInput->Text = sText;
       }
    

    Wie kann ich an der Stelle das angeklickte Item ermitteln, um nachher über objTree->Items->Item[iIndex]->... darauf zuzugreifen (entweder neuen Child anlegen oder einfach ->Text verändern) ?



  • Ok, ich habs gesehen. Tree->Selected gibt bereits den Knoten zurück. Ich hatte es immer mit Tree->Selected->Index versucht.


Anmelden zum Antworten