![]() |
VST in Datenbank speichern und wieder laden
Moin Delphi-Gemeinde,
ich möchte ein VirtualStringTree (VST) mit mehreren Ebenen (Nodes) in einer Tabelle speichern. Der Nutzer soll beliebig viele Ebenen anlegen können. Momentan habe ich keine Vorstellung wie man dabei vorzugehen hat. Hat eventuell jemand ein nachvollziebares Beispiel (Quelltext) zur Hand den er zur Verfügung stellen kann? Vielen Dank für alle evtl. erhaltene Hilfen |
AW: VST in Datenbank speichern und wieder laden
Wozu den Tree speichern?
Man speichert doch die internen Daten, welche hinter dem Tree liegen. :zwinker: Und dann werden diese Daten so wieder aus der DB geladen, wie sie vorher schonmal in den Tree gekommen sind. |
AW: VST in Datenbank speichern und wieder laden
Vielleicht als generellen Einstieg hilfreich...
VG Steku unit GeneralAbilitiesDemo; // Virtual Treeview sample form demonstrating following features: // - General use and feel of TVirtualStringTree. // - Themed/non-themed painting. // - Node button styles. // - Selection rectangle styles. // - Multiple columns, header, customize column backgrounds, header popup. // - Unicode strings. // - OLE drag'n drop image. // - Switchable main column. // - Right click select and drag. // - Node specific popup menu. // - Save tree content as text file. ![]() |
AW: VST in Datenbank speichern und wieder laden
Zitat:
![]() Bis bald... Thomas |
AW: VST in Datenbank speichern und wieder laden
Für die reinen Datensätze benötigst du eine primären Tabelle it ID und den Feldern für die eigentlichen Daten.
Aber achte darauf die Beziehungen zwischen den einzelnen Datensätzen (ID, ID_PARENT, optional: POSITION) in einer separaten sekundären Tabelle darzustellen. Andernfalls kannst du schon mal den Begriff "lock conflict" nachschlagen. |
AW: VST in Datenbank speichern und wieder laden
Zu disem Thema gibt es im Internet eigetnlich recht gute Ansätze, Erklärungen, Beispiele. Einfach mal nach "tree structure database" googeln.
Bei mir sieht die Struktur meist (vereinfacht) so aus:
Code:
Wobei MasterID immer auf den Parent zeigt. Ist MasterID = NULL, dann ist es die oberste Ebene.
CREATE TABLE TreeStruct (
ID INT IDENTITY, MasterID INT NULL, Position INT NOT NULL, (...daten...) ) Das Feld Position nutze ich dazu die relative Position zu speichern, damit der Baum wieder genau so geladen werden kann wie er gespeichert wurde (Reihenfolde der child-Knoten). Das könnte dann z.B. so aussehen:
Code:
Laden der Struktur ist relativ einfach. Es sollte beim Laden immer nach MasterID, Positition sortiert werden (ORDER BY MasterID, Position), damit beim Erzugen der der Untereinträge der Master existiert und die Untereinträge in der gewünschten Reihenfolge erzeugt werden.
ID MasterID Position
1 NULL 0 2 1 0 3 2 0 4 2 1 5 2 2 6 2 3 7 2 4 8 7 0 9 7 1 10 2 5 11 2 6 12 2 7 13 12 0 Speichern ist mit etwas Aufand verbunden. Bei kleinen Strukturen kann man die kompletten Daten löschen und einfach neu erzeugen (einfachster Weg). Bei umfangreicheren Strukturen nutze ich spzielle Mechanismen, die intern prüfen ob Datnsätze erzeugt, geändert, verschoben oder gelöscht wurden. Neue Datnsätze werden z.B. über ID = -1 identifiziert. Modifizierte Einträge werden an einem "Modified" flag identifiziert. Für gelöschte Einträge gibt es ein Array, welches die ID der gelöschten Datensätze enthält. Das ganze ist mit etwas Aufwand verbunden, hat aber den Vorteil, dass man nach belieben ändern kann und alles bei Bedarf in einem Rutsch gespeichert werden kann (Transaction). |
AW: VST in Datenbank speichern und wieder laden
Vielen Dank für Eure Antworten/Hinweise.
Dann werde ich mich mal an die Arbeit machen und die Hinweise abarbeiten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz