NodeChanging wird
vor dem Knotenwechsel aufgerufen (wie in der Hilfe angegeben). Der erste Code bezieht sich dabei überhaupt nicht auf den Node der dann gewählt wird, sondern nur auf die globale Variable Datensatz (warum die auch immer global ist?? Die Daten hängen am Knoten, da braucht man nichts globales -> sofort als lokale Variable anlegen!). Bei dem zweiten Versuch vorher einfach mal abfragen, ob Node und Data überhaupt ungleich Nil ist, und somit überhaupt Werte enthalten können. Node kann auch Nil sein, wenn ein aktueller Knoten deselektiert wird und genauso gut kann ein Knoten (z.B. Root-Knoten?) ausgewählt werden, welcher überhaupt keine Daten von dem
Query enthält und somit auch ein leeres Data besitzt.
Auch empfehle ich, lieber so auf Data zu zu greifen:
Delphi-Quellcode:
PDatensatz = ^TDatensatz;
TDatensatz = record
ID: string;
Typ: integer;
end;
...
ShowMessage(PDatensatz(Node.Data)^.ID);
Vor allem erstmal die globale Variable entfernen! Die birgt viel mehr Fehlerquellen und Unsicherheiten als Vorteile (wie man vllt. gerade sieht)