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 Virtual String Tree aus Oracle erstellen (https://www.delphipraxis.net/31227-virtual-string-tree-aus-oracle-erstellen.html)

Apollo13 6. Okt 2004 10:37


Virtual String Tree aus Oracle erstellen
 
hi @ all,

ich will mit der Komponente VirtualStringTree eine Baumstruktur aus einer Tabelle erstellen. Das einfach zuerst, wie kann ich individuell childnodes erstellen !!MIT!! den daten die ich auch da haben will. ich bekomme zwar ein child hin, aber stehen da als name und eben als daten der letzte eintrag der tabelle, obwohl das child an anfang ist?!?! :wall:

kann mir jemand vielleicht einen tipp über das einfügen von childnodes aus einer oracle tabelle geben, oder viellecht ein code-schnippsel???

mfg Apollo13

CenBells 6. Okt 2004 10:40

Re: Virtual String Tree aus Oracle erstellen
 
hi,

poste dochmal den code, den du bisher verwendest. Dann können wir dir sicher leichter helfen.

Gruß
Ken

Apollo13 6. Okt 2004 10:55

Re: Virtual String Tree aus Oracle erstellen
 
hier ist alles wichtig was ich in dem tree habe:

speedbutton löst die procedure aus...

Delphi-Quellcode:
procedure TForm1.LMDDockSpeedButton1Click(Sender: TObject);
begin
  LoadData;
end;

Delphi-Quellcode:
procedure tform1.LoadData;
begin
if not ADOQuery1.Active then
       ADOQuery1.Open;
ADOQuery1.filtered := false;
ADOQuery1.filter := '';
vtree.BeginUpdate;
vtree.Clear;
vtree.NodeDataSize := Sizeof(TMyRec);
ADOQuery1.First;
vtree.RootNodeCount := ADOQuery1.recordcount;
vtree.SortTree(0,sdAscending,true);
vtree.EndUpdate;
end;

Delphi-Quellcode:
procedure TForm1.VtreeInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  Data: PMyRec;
  treedata: PMyRec;
  nodeweg: PVirtualNode;
  i: integer;
begin
  with Sender do
  begin
    Data := GetNodeData(Node);
    Initialize(Data^);
    Data.Caption := adoquery1.FieldByName('BEZEICHNUNG').AsString;
    Data.ID := adoquery1.FieldByName('ID').AsInteger;
    Data.GruppeID := adoquery1.FieldByName('GRUPPEID').AsInteger;
    if Data.GruppeID = 1 then [b]//<- Problem, alle mit GruppeID = 1 sollen in extra childnode stehen[/b]
    begin
      i:=i+1;
      nodeweg := vtree.AddChild(vtree.getfirstchild(vtree.rootnode));
      vtree.GetFirstChild(vtree.rootnode).ChildCount := i; [b]//<- erstellt auch entsprechend viele nodes, nur eben mitdem faslchen daten...???[/b]
    end;
    if not adoquery1.eof then
    adoquery1.Next;

  end;
end;
Delphi-Quellcode:
procedure TForm1.VtreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  Data: PMyRec;
  i: integer;
begin
  Data := Sender.GetNodeData(Node);
  if Column = 0 then
    CellText := Data.Caption
  else if Column = 1 then
    CellText := inttostr(Data.ID)
  else if Column = 2 then
    CellText := inttostr(Data.GruppeID)
  else CellText := '';
  end;
so, das ist der code. hat irgendjemand einen tip(p) für mich, wie ich am einfachsten childnodes in den vst einfügen kann...?!?!?! kann auch eine andere art lösung sein als in diesem code hier...

help me.... :coder2:

CenBells 6. Okt 2004 21:58

Re: Virtual String Tree aus Oracle erstellen
 
hi,

ich werde mich morgen mal damit auseinandersetzen.
Nur was noch am rande, wie sieht die tabelle aus und wie behandelst du knoten, die keinen vater haben?
Und wie sieht das statement aus, mit dem du die knoten aus der db holst?
Und dann sieht mir das mit dem initNode merkwürdig aus. Wie willst du denn jetzt wissen, unter welchen knoten der aktuelle datensatz gehört???


Gruß
Ken

generic 7. Okt 2004 08:30

Re: Virtual String Tree aus Oracle erstellen
 
guten morgen.

recordcount funktioniert in sql datenbanken normal nicht. (abhaendig vom cursortyp)

wenn du einen baum im vst haben willst schau dir doch mal bitte bei mike den db-tree auf der page an.
http://scripts.soft-gems.net/download.php?ID=31

"virtualdbtree"

Apollo13 7. Okt 2004 13:42

Re: Virtual String Tree aus Oracle erstellen
 
hi @ all,

danke erstmal für die antworten

Zitat:

recordcount funktioniert in sql datenbanken normal nicht.
... funktioniert doch! das nehm ich schon immer um die datensatz-anzahl zu bestimmen.

ich hab allerdings jetzt eine lösung für viele meiner probleme gefunden. die funktion getnext(node) durchsucht alle nodes im tree, egal auf welchem level. damit ist es nun sehr einfach einen bestimmten datensatz zu suchen und den node einzufügen!!!

PS: für alle die wie ich newbie in sachen vst sind, hier ein sehr gutes tutorial, hat mich sehr viel weiter gebracht

thy bis zum nächsten post...
Apollo13

woki 7. Okt 2004 14:33

Re: Virtual String Tree aus Oracle erstellen
 
Zitat:

Zitat von Apollo13
hi @ all,

danke erstmal für die antworten

Zitat:

recordcount funktioniert in sql datenbanken normal nicht.
... funktioniert doch! das nehm ich schon immer um die datensatz-anzahl zu bestimmen.

Recordcount gibt üblichweise (gibt ja viele TDataset-Abkömmlinge) die Anzahl der aktuell in das Dataset geladenen Datensätze wieder (unter Berücksichtigung eventueller Filter).
Dies kann, muß aber nicht mit der Anzahl der in der Datenbank vorhandenen Datensätze übereinstimmen, weil unter Umständen Datensätze erst geladen werden, wenn sie benötigt werden.

Grüsse
Woki


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