Autor Beitrag
mrmiagi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Di 05.08.03 14:19 
Servus, bin absoluter Newbie in Delphi, deswegen könnte meine Frage vielleicht etwas zu simpel für dieses Forum sein!?
Ich möchte eine hierarchische Datenstruktur darstellen.
Die Namen der Knoten sollen aus einer paradox7 Tabelle geholt werden.
In einem Query sage ich welche Felder selektiert werden sollen. Meine Frage lautet jetzt wie ich die selektierten Felder als Namen für meine Knoten bekomme?
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 06.08.03 09:44 
Hallo!

In der Delphi-Hilfe befindet sich ein recht gutes Beispiel wie du Knoten einer TreeView hinzufügst.

Hier ist es (in abgewandelter Form):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  MyTreeNode: TTreeNode;
begin
  with TreeView1.Items do
  begin
    Clear; { vorhandene Knoten entfernen }

    MyTreeNode := Add (nil'RootTreeNode1'); { Hauptknoten hinzufügen }
    
    AddChild (MyTreeNode, 'ChildNode1'); { Untergeordneter Knoten hinzugefügt }

    AddChild (MyTreeNode, 'ChildNode2'); { Untergeordneter Knoten hinzugefügt }

  end;
end;
mrmiagi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Mi 06.08.03 11:31 
Aber wie bekomme ich statt 'RootTreeNode1' das Ergebnis einer SQL-Query Abfrage als Name des Knoten??
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 06.08.03 12:22 
hallo,
dann schreibst du ins obere beispiel anstelle 'RootTreeNode1' query.fieldbyname('DeinFeldName').AsString

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
mrmiagi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Do 07.08.03 09:05 
ausblenden Delphi-Quelltext
1:
MyTreeNode := Add (nil, query2.fieldbyname('struktur').AsString);					

:cry: Gibt aber immer im Treeview einen leeren Root aus. Meine SQL-Abfrage funktioniert aber! :cry:
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 07.08.03 10:49 
mrmiagi hat folgendes geschrieben:
Meine SQL-Abfrage funktioniert aber! :cry:

Wie kommst du darauf?

Versuch als erstes mal einen Test-String anzugeben:
ausblenden Delphi-Quelltext
1:
MyTreeNode := Add (nil'Hauptknoten');					

Wir der Knoten richtig angezeigt würde ich versuchen den Text aus der Datenbank anzugeben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var
  Str: String;
Begin
  Str := query2.fieldbyname('struktur').AsString;
  MyTreeNode := Add (nil, Str);
End;

Wenn es nicht klappen sollte dann setze einen Haltepunkt auf die letzte Zeile (MeyTreeNode := Add...) und überprüfe den Wert der Variable Str.

Gruß
Tino
mrmiagi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Do 07.08.03 16:08 
Hallo, hatte vergessen query.active auf true zu setzen. Jetzt habe ich ein neues Problem:
Ich möchte mehrere Roots aus meiner Abfrage einlesen. Ich verwende dazu ein Kennzeichen in meiner Datenbank das angiebt an weilcher Stelle in der Baumstruktur der Satz erscheinen soll. So möchte ich den Baum dynamisch füllen können. Wie mache ich das am besten?
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 07.08.03 17:21 
hallo,

wenn die datensätze, die als kinder unter einem knoten angezeigt werden, direkt nach dem Vater in der tabelle kommen, ist es einfach.

ungefähr so in Pseudocode
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  LVater, LKind: TTreenode;
...
begin
...
  while not (LQuery.eof) do begin
    // jetzt den identifier testen
    // sagt er neuer Root oder so, dann
   if  query.fieldByName('identifier').asstring = 'Root' then
    LVater := Treeview.items.add(nil, query.fieldbyname('DeinFeldName').AsString)
   else
   // andernfalls
    LKind := Treeview.items.add(LNode, query.fieldbyname('DeinFeldName').AsString);
    LQuery.Next;
  end;


Wenn die daten nicht so schön geordnet sind, musst du beim einfügen eines Kindknoten den gesamten baum durchsuchen und wenn der vater gefunden wurde, an ihn dran hängen.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.