Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualTreeView und Baumstruktur (SQL) (https://www.delphipraxis.net/63125-virtualtreeview-und-baumstruktur-sql.html)

Karstadt 14. Feb 2006 11:05


VirtualTreeView und Baumstruktur (SQL)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo. Arbeite seit ein Paar Tagen an eine Lösung wie ich die "Warengruppen" in eine VirtualTreeView einlesenkann.

So Sieht meine Tabelle aus:
wg1-wg10 (10 Felder für maximal 10 Untergruppen) und eine id Feld des Datesnatzes.


So gehe ich vor:

Tabelle

Delphi-Quellcode:
Var
   i:Integer;
   L_Acc_value:Packed array[0..99] of Variant;

  TreeData: TTreeData;
  TestKnoten, Knoten,Knoten_alt,Unter_Knoten_alt: PVirtualNode;
begin
  // Alle Einträge werden gelöscht!
  VST.Clear;

  //Größe von Eingabedaten werden übergeben
  VST.NodeDataSize:=SizeOf(TTreeData);

  //Begine die Knoten einzufügen
  VST.BeginUpdate;

  with q_wg do
  begin
    Close;
    Open;
     First;

    While not Eof do
    begin

      //Hauptknoten! Hauptkategorien
      If L_Acc_Value[0]<> Fields[0].Value then
        begin
          TreeData.FCaption := Vartostr(Fields[0].Value);
          Knoten:=AddVSTStructure(VST,nil,TreeData);
          Knoten_alt := Knoten;
        end
        // Falls in der Hauptkategorie eine weitere Unterkategorie dann wird die hier eingetragen!
        else Knoten := Knoten_alt;
          L_Acc_Value[0]:=Fields[0].Value;

      //Unterknoten, Unterkategorien
      For i:=1 to FieldCount-1 do
      begin

        // Nicht Null, nicht leer, Nicht gleich!
        if (L_Acc_Value[i]<> Fields[i].Value) And (not VarIsNull(Fields[i].Value)) And (Fields[i].Value <> '')  then
        begin
          // Nur Zur Kontrolle!!

          Unter_Knoten_alt := Knoten;
          TreeData.FCaption := Vartostr(Fields[i].Value);
          Knoten:=AddVSTStructure(VST,Knoten,TreeData);
        end
        else
        begin
          IF (L_Acc_Value[i] = Fields[i].Value) And (not VarIsNull(Fields[i].Value)) And (Fields[i].Value <> '') Then
          begin
//             Showmessage(IntToStr(Knoten.Index));
             Knoten := Unter_Knoten_alt;
          end;
        end;
          L_Acc_Value[i]:=Fields[i].Value;
      end;

      //Nächsten Datensatz
      next;
    end;
  end;

  //Beende die Knoten einzufügen
  VST.EndUpdate;

  //Sortierung, die DS werden per SQL sortiert!

  //Vst.SortTree(1,sdAscending,True);
end;
So sieht das aus wenn das Fertig ist.

Fehler ist in
Hardware-Mäuse-Com1-Schwarz
Hardware-Mäuse-PS2-Schwarz

Ich bin langsam am Ende, kann mir bitte jemand helfen.

sh17 14. Feb 2006 16:51

Re: VirtualTreeView und Baumstruktur (SQL)
 
warum liest Du Deine Daten nicht erst in ein eigenes Baumobjekt ein und lässt es dann vom VST nur noch anzeigen?

Die setzt dann vst.rootnodecount = meinbaum.Count.

und initialisiert das ganze über vst.OnInitNode

Karstadt 15. Feb 2006 07:14

Re: VirtualTreeView und Baumstruktur (SQL)
 
Mein Problem ist eigentlich eine Struktur zu finden, wie ich die Daten in eine Tabelle sinnvoll eintragen kann und wider auslesen.

Wie soll die Tabellestruktur in meinen Fall sein, denn so wie ich das jetzt habe scheint das nicht zu funktionieren.

sh17 15. Feb 2006 08:13

Re: VirtualTreeView und Baumstruktur (SQL)
 
Zitat:

Zitat von Karstadt
Mein Problem ist eigentlich eine Struktur zu finden, wie ich die Daten in eine Tabelle sinnvoll eintragen kann und wider auslesen.

Wie soll die Tabellestruktur in meinen Fall sein, denn so wie ich das jetzt habe scheint das nicht zu funktionieren.

Können den mehr als 10 Ebenen (Warengruppen) auftreten?

Karstadt 15. Feb 2006 08:21

Re: VirtualTreeView und Baumstruktur (SQL)
 
Ja. Warum nicht. 10 ist Maximum.

sh17 15. Feb 2006 08:42

Re: VirtualTreeView und Baumstruktur (SQL)
 
dann kannst Du die Struktur ja so lassen

Baum erstellen

aus

Delphi-Quellcode:
TWarengruppe = class;
public
  ID : String;
  Untergruppen : TWarengruppeObjectList;
end;

var
  root : TWarengruppe;


procedure fuellen;
var
  currNode : TWarengruppe;
  i : Integer;
begin
 
  über alle tabellenzeilen do
  begin
  currNode := root;

  for i := 0 to 9 do
  begin
    if wrg[i] <> '' then
    begin
      currNode := currNode.Untergruppen.GetWrg(wrg[i]); //in getWrg Obj bei Bedarf erstellen
    end else
      break;
  end;

  end;

end;
Ich hoffe, ich hab nix übersehen

Emilio 15. Feb 2006 09:35

Re: VirtualTreeView und Baumstruktur (SQL)
 
Was spricht dagegen, die Warengruppen und Untergruppen in einem table vorzuhalten?

WarengruppenID primär Index - unique
WParentID, sekundär Index - nicht unique
Warengruppe

Im Feld WParentID trägst Du jeweils die ID der "Hauptgruppe" ein. Anbinden an VT und dann sollte es gehen.

Emilio


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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