![]() |
VST aus 2 SQL-Tabellen Baumstruktur erzeugen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,
ich versuche eine Baumansicht im VST darzustellen. Dazu möchte ich aus zwei miteinander verknüfte SQL-Tabellen im VST anzeigen ohne Spalten (wie eine Explorer Ansicht). Ich habe schon alle Foren nach einer Lösung durchsucht, ohne Erfolg. Leider ist die VST schwer zu Verstehen und die Doku dazu.. na ja, hab schon bessere Beschreibungen gesehen. Bitte kann mir da jemand weiterhelfen. Bitte nur die VST. Ich habe es auch mit TDBVST probiert, ist aber nicht das was ich nutzen kann. Dafür benötigt man eigene Tabellen. Meine Aufgabe: Struktur der Baumansicht WoNumber=10001 +++++|__PartName=P227 ++++++++++++++++++|__Material=1.4301 ++++++++++++++++++|__Thickness=6 ++++++++++++++++++|__QTY=5 ++++++++++++++++++|__QTYOrdered=5 +++++|__PartName=P237 ++++++++++++++++++|__Material=1.4403 ++++++++++++++++++|__Thickness=8 ++++++++++++++++++|__QTY=51 ++++++++++++++++++|__QTYOrdered=51 +++++|__PartName=P603 ++++++++++++++++++|__Material=SS ++++++++++++++++++|__Thickness=12 ++++++++++++++++++|__QTY=10 ++++++++++++++++++|__QTYOrdered=10 WoNumber=10002 +++++|__PartName=P701 ++++++++++++++++++|__Material=ST37 ++++++++++++++++++|__Thickness=5 ++++++++++++++++++|__QTY=5 ++++++++++++++++++|__QTYOrdered=5 Ich habe zwei SQL-Tabellen die über die Spalte WoNumber verknüpft sind. Siehe Bild Dort sieht man auch gleich wo das Problem liegt. Ich dachte ich gehe den richtigen Weg wenn ich die OnInitNode und OnGetText nutze, krieg das aber nicht hin. Hier meine Vorgehensweise type // Definition der Daten: PMyData = ^TMyData; TMyData = record WONumber: integer; Level: integer; CustomerName:String[100]; PartName:String[100]; Material:String[50]; Thickness:Double; end; procedure TForm1.RebuildTree; begin VTree.RootNodeCount := ADOWo.RecordCount; VTree.NodeDataSize := SizeOf(TMyData); end; procedure TForm1.VTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); var data:PMyData; begin data := Sender.GetNodeData(Node); case sender.GetNodeLevel(node) of 0: celltext:=inttostr(data.WONumber); 1: celltext:=data.PartName; 2: celltext:=data.Material; // keine Ahnung was hier geschehen muss end; end; procedure TForm1.VTreeInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal); begin // set childcount to the detail dataset's recordcount ADOWO.RecNo := node.Index+1; childcount := ADOPART.RecordCount; end; procedure TForm1.VTreeInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var data:PMyData; begin data := Sender.GetNodeData(Node); if Sender.GetNodeLevel(Node) = 0 then begin // master node - WoOrderNumber ADOWO.RecNo := node.Index + 1; data.WONumber := ADOWO.FieldByName('WONumber').asInteger; if ADOPART.RecordCount > 0 then InitialStates:=InitialStates+[ivsHasChildren]; // ******* bis hierhin alles ok end else begin // detail node - order if Sender.GetNodeLevel(Node) = 1 then InitialStates:=InitialStates+[ivsHasChildren]; data.PartName := ADOPART.fieldbyname('PartName').AsString; // ******* ab hier beginnen die Probleme data.Material := 'Material : ' + ADOPART.fieldbyname('Material').AsString; end; end; Danke schon mal für... DETLEF |
Re: VST aus 2 SQL-Tabellen Baumstruktur erzeugen
Hallo dreder,
auch wenn ich nicht weiss was VST ist, vielleicht hilft dir das ![]() Gruss Thorsten |
Re: VST aus 2 SQL-Tabellen Baumstruktur erzeugen
das ihr euch immer auf initnode usw. einschiesst.
initnode kann effektiv verwendet werden um masse schnell in den baum zu bekommen. strukturen lassen sich mit dem klassischen weg via 2 schleifen (durch die datensätze) und mit vst.addchild einfacher zusammen bauen. wenn du es dann super effektiv haben willst, schaust du die die sql sachen auf welche mein vorschreiber hingewiesen hat. dann verstehe ich nicht warum ihr alle records verwendet. wir haben hier eine oo-sprache. records=old school objects=new school hier mal bitte schauen und den post #4 beachten - da war noch ein fehler drin: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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