AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VST in Datenbank speichern und wieder laden

Ein Thema von NoName1 · begonnen am 24. Jun 2023 · letzter Beitrag vom 26. Jun 2023
Antwort Antwort
NoName1

Registriert seit: 8. Mär 2018
194 Beiträge
 
Delphi 11 Alexandria
 
#1

VST in Datenbank speichern und wieder laden

  Alt 24. Jun 2023, 12:08
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

AW: VST in Datenbank speichern und wieder laden

  Alt 24. Jun 2023, 12:12
Wozu den Tree speichern?

Man speichert doch die internen Daten, welche hinter dem Tree liegen.

Und dann werden diese Daten so wieder aus der DB geladen, wie sie vorher schonmal in den Tree gekommen sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: VST in Datenbank speichern und wieder laden

  Alt 24. Jun 2023, 12:20
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.


https://github.com/JAM-Software/Virt...litiesDemo.pas
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#4

AW: VST in Datenbank speichern und wieder laden

  Alt 24. Jun 2023, 17:12
Hat eventuell jemand ein nachvollziebares Beispiel (Quelltext) zur Hand den er zur Verfügung stellen kann?
Als Einstieg könnte dir vielleicht der Artikel Einen JSON-Viewer mit DocVariant und Virtual TreeView realisieren helfen.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VST in Datenbank speichern und wieder laden

  Alt 24. Jun 2023, 18:28
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.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#6

AW: VST in Datenbank speichern und wieder laden

  Alt 25. Jun 2023, 07:34
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:
CREATE TABLE TreeStruct (
  ID INT IDENTITY,
  MasterID INT NULL,
  Position INT NOT NULL,
  (...daten...)
)
Wobei MasterID immer auf den Parent zeigt. Ist MasterID = NULL, dann ist es die oberste Ebene.

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:
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
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.

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).
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
NoName1

Registriert seit: 8. Mär 2018
194 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: VST in Datenbank speichern und wieder laden

  Alt 26. Jun 2023, 07:57
Vielen Dank für Eure Antworten/Hinweise.
Dann werde ich mich mal an die Arbeit machen und die Hinweise abarbeiten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz