Tree aufbauen
-
Hallo,
ich hab in der Datenbank diese Feldstruktur:
Parent, Entry, KeyDie 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 Eintrag10Aber 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 istNur 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.