![]() |
Ausgeben von einer Datenbank mit TTreeView
Moin KOllegen!
Hab folgendes Problem: Möchte diese Tabelle bzw. Datenbank mit der Komponente TTreeView ausgeben: Hab bereits wie ein verrückter gegoogelt, aber nichts wirklich passendes gefunden....die Meisten benutzen Fremdkomponente wie zB VirtualTreeView ect., aber ich möchte bzw ich muss es von meinem Chef aus mit der TTreeView machen....WEr kann bitte helfen bzw auch ein paar Schnipsel anbieten...VIelen Dank im voraus.... |
Re: Ausgeben von einer Datenbank mit TTreeView
... wo ist denn genauer dein problem? die daten zu sortieren, damit man diese den items zu weisen kann oder in der erstellung des trees?
|
Re: Ausgeben von einer Datenbank mit TTreeView
... ach so herzlich willkommen in der dp :dp:
|
Re: Ausgeben von einer Datenbank mit TTreeView
Die Darstellung des Trees, die Sortierung in Items usw. bzw die komplette Umsetzung der Aufgabe in die Praxis.....sorry
|
Re: Ausgeben von einer Datenbank mit TTreeView
... was hast du denn schon ?
|
Re: Ausgeben von einer Datenbank mit TTreeView
Bis auf das Struktogramm mehr oder weniger nichts...wie gesgt bin FIAE im 1. Lehrjahr...1.Monat u hab halt diese Aufgabe bekommen.... :( Halt die Umsetzung ist etwas schwer zur Zeit für mich, da ich leider nicht so viel Erfahrung in Delphi habe...
|
Re: Ausgeben von einer Datenbank mit TTreeView
1. bekommst du denn die daten aus der db?
2. die daten solltest du dann nach der parent-id-spalte sortieren, kann man schon beim abrufen der daten machen, jedenfalls sieht es so aus, als wenn die unterkategorie eine größere id hat als die des parent 3. dann könntest du den baum erstellen und 4. hier im forum gibt es eine tolle suchfunktion und gute tutorien mit denen du anfangen könntest! grüsse rené |
Re: Ausgeben von einer Datenbank mit TTreeView
Die Daten bekomm ich über die ADODataSet per SQL Anweisung raus:
Delphi-Quellcode:
Ich hab schon bereits im Board gesucht, aber nichts wirklich passendes gefunden...die Meisten benutzen andere KOmponenten und deshalb die Probs beim Darstellen des Baumes... :(
select * from tblArtKategorie
order by intArtKatID, intArtKatParentID |
Re: Ausgeben von einer Datenbank mit TTreeView
Hallo,
da gehst du am besten rekursiv durch deine Tabelle, damit du deinen Baum aufbauen kannst... Angefangen wird, indem du dir einen Stammknoten bildest, und dich auf diesen positionierst. Das wär bei dir
SQL-Code:
und setzt dann ID := intArtKatID ;
select * from tabelle where intArtKarID = 0
Dann muss du folgende Abfrage rekursiv durchlaufen: 1.
SQL-Code:
2. Eintrag in Tabelle einfügen, mit Parent :ID
select * from Tabelle where intArtKatParent = :ID
3. ID := intArtKatID (hier dann rekursiver Aufruf) 4. auf nächsten Eintrag in deinem Resultset der Abfrage gehen und zurück zu Punkt 1., bis du am Ender deines Resultset angelangt bist So würd ichs zumindest machen. Gruß, Tom |
Re: Ausgeben von einer Datenbank mit TTreeView
Erstmal ist folgende, grundsätzlich Frage zu klären, die eine mögliche Lösung betrifft:
Liegen die Hauptknoten (intArtKadID) immer in sortierter, aufsteigender Reihenfolge vor? Wenn nein, solltest Du das erstmal durch eine geeignete Sortierung in der Abfrage erreichen (erleichtert den späteren Vorgang erheblich). Ich mache es (zwar mit einem VirtualTreeview) so: - ich lese alle Datensätze ein, dann werden diese in einer Schleife abgearbeitet - ist der aktuelle Knoten ein "root"-Knoten, dann als Root setzen (root-Kennzeichen ist in der DB hinterlegt) - ist der aktuelle Knoten ein "child", dann als Child des betreffenden Roots anhängen (durch die vorherige Sortierung vermeidest Du, dass es ein Child geben könnte, wozu noch kein root-Knoten existiert) Bei der normalen Treeview-Komponente gibt es jetzt das Problem, wo Du diese Relation speicherst, denn Du benötigst dazu mindestens 2 Informationen (KnotenID und Parent/Child-ID). Dazu gibt es die möglichkeit, diese Informationen in einer gesonderten Datenstruktur, die Du dann mittels "Tag" mit dem jeweiligen Node verknüpfst, zu hinterlegen - musst Du aber dann auch separat abspeichern. Grds. rate ich Dir (trotz Deines Chefs) vom normalen Treeview für solche Aufgaben ab. Hintergrund: Du kannst nur die Abhängigkeit darstellen, aber keine zusätzlichen Informationen anzeigen, wie z.B. Anschaffungskosten, Standort, etc. Dies wäre eine Mischung aus TV und Listview - und genau das bietet der VirtualTreeview. Schau Dir dazu mal den Windows Datei Explorer an. Links hast Du die Ordnerabhängigkeiten und rechts die Ordnerinhalte - sehr unschön für eine Anwendung, wie Du sie planst. Alternativ kann man evtl. Zusatzinformationen noch in einer separaten Form anzeigen lassen - noch unschöner ;-) Gruß Igotcha |
Re: Ausgeben von einer Datenbank mit TTreeView
Geht, unabhängig von der Sortierung:
Delphi-Quellcode:
Aufruf mit:
type
TMyHardware = Record Id : Integer; IdParent : Integer; end; PMyHardware = ^TMyHardware; procedure FillTreeView(TheView : TTreeView; TheData : TDataSet); implementation procedure FillTreeView(TheView : TTreeView; TheData : TDataSet); // diese Prozedur verschiebt den übergebenen Knoten and // die richtige Position im TreeView procedure MoveToParentNode(TheNode: TTreeNode); var x : Integer; begin for x := 0 to TheView.Items.Count-1 do begin if Assigned(TheView.Items[x].Data) then begin if PMyHardware(TheView.Items[x].Data).Id = PMyHardware(TheNode.Data).IdParent then begin TheNode.MoveTo(TheView.Items[x],naAddChild); Break; end; end; end; end; // Beginn von FillTreeView: var Root,AktNode : TTreeNode; i : Integer; begin TheData.First; Root := TTreeNode.Create(TheView.Items); Root.Text := 'Hardware'; Root.Data := nil; while not TheData.EOF do begin AktNode := TTreeNode.Create(TheView.Items); AktNode.Data := new(PMyHardware); PMyHardware(AktNode.Data).Id := TheData.FieldByName('IntArtKatId').AsInteger; PMyHardware(AktNode.Data).IdParent := TheData.FieldByName('IntArtKatParent').AsInteger; TheData.Next; end; for i := 0 to TheView.Items.Count-1 do begin if Assigned(TheView.Items[i].Data) then begin if PMyHardware(TheView.Items[i].Data).IdParent <> 0 then MoveToParentNode(TheView.Items[i]); end; end; end;
Delphi-Quellcode:
Gruß
FillTreeView(DeineTreeViewKomponente,DeineAdoQuerry);
|
Re: Ausgeben von einer Datenbank mit TTreeView
Zitat:
Gruß, |
Re: Ausgeben von einer Datenbank mit TTreeView
Das vermeidest Du durch die Sortierung und kannst Dir dann eine "komplizierte" rekursive Abarbeitung sparen, da Parents dann immer bereits vor Children existieren.
Gruß Igotcha P.S. Ich sehe aber noch ein anderes Problem: Er möchte doch sicher auch Informationen visuell hinzufügen können und dann müssen die Daten in die DB zurückgeschrieben werden können. Ohne eine Data-Struktur kommt man dann hier ohnehin nicht aus. |
Re: Ausgeben von einer Datenbank mit TTreeView
Erstmal danke an euch alle, dass ihr so hilfsbereit seid! Ist echt klasse!
Hab mal den Quellcode von Leuselator getestet, aber keine Reaktion! :shock: Wo habe ich den Fehler bzw was fehlt?! Hab die Grid nur eingebaut um zu sehen was in der DB steht...
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Grids, DBGrids, DB, StdCtrls, Buttons, ADODB; type TMyHardware = class(TForm) ADOQuery1: TADOQuery; ADODataSet1: TADODataSet; ADOConnection1: TADOConnection; DataSource1: TDataSource; DBGrid1: TDBGrid; TreeView1: TTreeView; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var MyHardware: TMyHardware; procedure FillTreeView(TheView : TTreeView; TheData : TDataSet); implementation {$R *.dfm} procedure FillTreeView(TheView : TTreeView; TheData : TDataSet); type TMyHardware = Record Id : Integer; IdParent : Integer; end; PMyHardware = ^TMyHardware; // diese Prozedur verschiebt den übergebenen Knoten and // die richtige Position im TreeView procedure MoveToParentNode(TheNode: TTreeNode); var x : Integer; begin for x := 0 to TheView.Items.Count-1 do begin if Assigned(TheView.Items[x].Data) then begin if PMyHardware(TheView.Items[x].Data).Id = PMyHardware(TheNode.Data).IdParent then begin TheNode.MoveTo(TheView.Items[x],naAddChild); Break; end; end; end; end; // Beginn von FillTreeView: var Root,AktNode : TTreeNode; i : Integer; begin TheData.First; Root := TTreeNode.Create(TheView.Items); Root.Text := 'Hardware'; Root.Data := nil; while not TheData.EOF do begin AktNode := TTreeNode.Create(TheView.Items); AktNode.Data := new(PMyHardware); PMyHardware(AktNode.Data).Id := TheData.FieldByName('IntArtKatId').AsInteger; PMyHardware(AktNode.Data).IdParent := TheData.FieldByName('IntArtKatParentID').AsInteger; TheData.Next; end; for i := 0 to TheView.Items.Count-1 do begin if Assigned(TheView.Items[i].Data) then begin if PMyHardware(TheView.Items[i].Data).IdParent <> 0 then MoveToParentNode(TheView.Items[i]); end; end; end; procedure TMyHardware.Button1Click(Sender: TObject); begin FillTreeView(TreeView1,ADOQuery1); end; end. |
Re: Ausgeben von einer Datenbank mit TTreeView
Hast du auch die DB Geöffnet
Delphi-Quellcode:
procedure TMyHardware.Button1Click(Sender: TObject);
begin ADOQuery1.Active:=True; FillTreeView(TreeView1,ADOQuery1); ADOQuery1.Active:=False; end; |
Re: Ausgeben von einer Datenbank mit TTreeView
Ja, DB ist geöffnet bzw ADOQuery1 auf TRUE :shock:
|
Re: Ausgeben von einer Datenbank mit TTreeView
:idea: Wenn ich mich recht erinnnere, gibt's in der Jedi-Lib eine TDBTreeView-Komponente.
|
Re: Ausgeben von einer Datenbank mit TTreeView
es gibt viele Komponente, aber dieses Problem soll mit der TTreeView KOmponente gelöst werden, wie ich es bereits erwähnt habe!:) Trotzdem thx
|
Re: Ausgeben von einer Datenbank mit TTreeView
Die Tipp- und Umbenennungsarbeit solltest Du eigentlich schon selbst machen:
Delphi-Quellcode:
Gruß
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Grids, DBGrids, DB, StdCtrls, Buttons, ADODB; type THardware = Record Id : Integer; IdParent: Integer; end; PHardware = ^THardware; TMyHardware = class(TForm) ADOQuery1: TADOQuery; ADODataSet1: TADODataSet; ADOConnection1: TADOConnection; DataSource1: TDataSource; DBGrid1: TDBGrid; TreeView1: TTreeView; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var MyHardware: TMyHardware; implementation {$R *.dfm} procedure TMyHardware.Button1Click(Sender: TObject); // diese Prozedur verschiebt den übergebenen Knoten and // die richtige Position im TreeView procedure MoveToParentNode(TheNode: TTreeNode); var x : Integer; begin for x := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[x].Data) then begin if PHardware(TreeView1.Items[x].Data).Id = PHardware(TheNode.Data).IdParent then begin TheNode.MoveTo(TreeView1.Items[x],naAddChild); Break; end; end; end; end; // Beginn von FillTreeView: var Root,AktNode : TTreeNode; i : Integer; begin ADOQuery1.First; Root := TTreeNode.Create(TheView.Items); Root.Text := 'Hardware'; Root.Data := nil; while not ADOQuery1.EOF do begin AktNode := TTreeNode.Create(TreeView1.Items); AktNode.Data := new(PHardware); PHardware(AktNode.Data).Id := ADOQuery1.FieldByName('IntArtKatId').AsInteger; PHardware(AktNode.Data).IdParent := ADOQuery1.FieldByName('IntArtKatParentID').AsInteger; ADOQuery1.Next; end; for i := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[i].Data) then begin if PHardware(TreeView1.Items[i].Data).IdParent <> 0 then MoveToParentNode(TreeView1.Items[i]); end; end; end; end. |
Re: Ausgeben von einer Datenbank mit TTreeView
sorry, dachte, dass hätte ich bereits getan....weil der mir auch beim Kompilieren usw kein Fehler angezeigt hat.... :|
|
Re: Ausgeben von einer Datenbank mit TTreeView
Hab es nun nach deiner Reihenfolge gemacht:
Code:
:(
[Fehler] Unit1.pas(58): Undefinierter Bezeichner: 'TheView'
[Fehler] Unit1.pas(58): 'END' erwartet, aber ')' gefunden [Fehler] Unit1.pas(61): ';' erwartet, aber 'WHILE' gefunden [Fehler] Unit1.pas(62): Undefinierter Bezeichner: 'AktNode' [Fehler] Unit1.pas(62): Undefinierter Bezeichner: 'TreeView1' [Fehler] Unit1.pas(62): 'END' erwartet, aber ')' gefunden [Fehler] Unit1.pas(67): '.' erwartet, aber ';' gefunden [Fehler] Unit1.pas(68): Bezeichner redefiniert: 'Finalization' [Fehler] Unit1.pas(69): ')' erwartet, aber Bezeichner 'Items' gefunden [Fehler] Unit1.pas(70): ')' erwartet, aber Bezeichner 'Items' gefunden [Fehler] Unit1.pas(77): Anweisung erwartet, aber Dateiende gefunden [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: Ausgeben von einer Datenbank mit TTreeView
1. ersetze in Zeile 58 TheView (gibt es nicht mehr) durch TreeView1
2. Schreib erstmal ein paar kleine Programme, damit Du den Umgang mit Delphi und IDE erlernst, bevor Du Dir hier Hausaufgaben machen lässt. Ende meiner Posts zu diesem Thread |
Re: Ausgeben von einer Datenbank mit TTreeView
Naja schade, dass du direkt so gereizt bsit! Sagte doch bin Azubi im 1.Jahr (gerade 1 Monat erst rum) und mit allen Komponenten ect. nicht so viel Erfahrung wie du zb!
:( Trotzdem thx für deine Hilfe! Weiss ich zu schätzen und sorry für die Unannehmlichkeiten! |
Re: Ausgeben von einer Datenbank mit TTreeView
Siehst Du, ZeroCool, jetzt geht's Dir hier auch nicht anders, als unter Delphi-Groups.
Da hat auf Dauer nämlich niemand Bock drauf, für Dich das denken zu übernehmen und Dir am besten gleich komplett fertige Sourcen zu liefern, während Du selbst Dich überhaupt gar nicht anstrengst. :wink: |
Re: Ausgeben von einer Datenbank mit TTreeView
Naja, das hat damit nichts zu tun! Das wäre das Gleiche als würde ich dir nen chinesischen Text hinlegen u du sollst übersetzen! Ohne Vorkenntnisse bzw wenn dir keiner hilft kannst du fast nichts machen! Ich hab halt bei der Umsetzung Probleme, obwohl ich weiss was zu machen ist sprich nach dem Struktogramm vorzugehen!
|
Re: Ausgeben von einer Datenbank mit TTreeView
Zitat:
Dokus lesen, Ausprobieren, fang' erstmal mit kleinen Sachen an, schau's Dir im Debugger an, was genau er da macht usw.... Wenn Du es Dir jetzt nicht selbst erarbeitest, dann stehst Du bei dem nächsten Problem wieder hier und willst Dir von jemandem alles vorkauen lassen. So lernst Du's nie.... P.S. aber hey.. was red' ich ... ist ja Deine Sache ... |
Re: Ausgeben von einer Datenbank mit TTreeView
Morgen,
ich versuche gerade eine Tabelle die ich in einer SQL DB habe in einem TreeView auszugeben. Dazu habe ich mir schon den Thread angeschaut und so ziemlich alles davon verwenden koennen. Ich bekomm auch keine Fehlermeldung, aber es wird keine Ausgabe im TreeView erstellt. Waere euch sehr dankbar wenn ihr mir einen kleinen Denkanstoss geben wuerdet. Ich vermute dass das Problem in der For Schleife liegt, nur leider weiss ich nicht genau wo. Danke im voraus.
Delphi-Quellcode:
unit Hauptformular;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, Menus, OleCtrls, SHDocVw, DB; type TFmHaupt = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; TreeView1: TTreeView; Splitter1: TSplitter; Panel1: TPanel; WebBrowser1: TWebBrowser; Panel2: TPanel; DSTreeView: TDataSource; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TTView = Record ID : Integer; ParentID : Integer; end; PView = ^TTView; var FmHaupt: TFmHaupt; implementation uses HauptformularDM; {$R *.dfm} //-08-Aug-2005-------------------------------------------------------------------------------------- // Form Create procedure TFmHaupt.FormCreate(Sender: TObject); procedure MoveToParentNode(TheNode: TTreeNode); var x : Integer; begin for x := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[x].Data) then begin if PView(TreeView1.Items[x].Data).ID = PView(TheNode.Data).ParentID then begin TheNode.MoveTo(TreeView1.Items[x], naAddChild); Break; end; end; end; end; var Root,AktNode : TTreeNode; i : Integer; begin DMHaupt.QHauptTreeView.First; Root := TTreeNode.Create(TreeView1.Items); Root.Text := 'Test'; Root.Data := nil; while not DMHaupt.QHauptTreeView.EOF do begin AktNode := TTreeNode.Create(TreeView1.Items); AktNode.Data := new(PView); PView(AktNode.Data).ID := DMHaupt.QHauptTreeView.FieldByName('ID').AsInteger; PView(AktNode.Data).ParentID := DMHaupt.QHauptTreeView.FieldByName('ParentID').AsInteger; DMHaupt.QHauptTreeView.Next; end; for i := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[i].Data) then begin if PView(TreeView1.Items[i].Data).ParentID <> 0 then MoveToParentNode(TreeView1.Items[i]); end; end; end; |
Re: Ausgeben von einer Datenbank mit TTreeView
So hab jetzt mal ein Problem festgestellt.
Ich war wiedermal zu unaufmerksam beim lesen und hab uebersehen, dass das auffuellen des Trees in eine extra Procedure gehoert. Trotzdem funktioniert die Ausgabe noch nicht. Hier mal meinen neuen Code
Delphi-Quellcode:
[Edit] Wenn ich das Programm in einzelnen Schritten durchgehe, dann durchlaeuft es zwar die Procedure VillTree, aber die for schleife wird nicht durchgelaufen, da der TreeView1.Items.Count 0 ist. Was mach ich nur falsch? [/Edit]
unit Hauptformular;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, Menus, OleCtrls, SHDocVw, DB; type TFmHaupt = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; TreeView1: TTreeView; Splitter1: TSplitter; Panel1: TPanel; WebBrowser1: TWebBrowser; Panel2: TPanel; DSTreeView: TDataSource; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); procedure FillTreeView(TheView : TTreeView; TheData : TDataSet); private { Private-Deklarationen } public { Public-Deklarationen } end; type TTView = Record ID : Integer; ParentID : Integer; end; PView = ^TTView; var FmHaupt: TFmHaupt; implementation uses HauptformularDM; {$R *.dfm} //-08-Aug-2005-------------------------------------------------------------------------------------- // Form Create procedure TFmHaupt.FormCreate(Sender: TObject); begin FillTreeView(TreeView1, DMHaupt.QHauptTreeView); end; //-08-Aug-2005-------------------------------------------------------------------------------------- // procedure TFmHaupt.FormClose(Sender: TObject; var Action: TCloseAction); begin // end; //-08-Aug-2005-------------------------------------------------------------------------------------- // procedure TFmHaupt.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin // end; //-08-Aug-2005-------------------------------------------------------------------------------------- // procedure TFmHaupt.FormDestroy(Sender: TObject); begin // end; //-09-Aug-2005-------------------------------------------------------------------------------------- // procedure TFmHaupt.FillTreeView(TheView: TTreeView; TheData: TDataSet); procedure MoveToParentNode(TheNode: TTreeNode); var x : Integer; begin for x := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[x].Data) then begin if PView(TreeView1.Items[x].Data).ID = PView(TheNode.Data).ParentID then begin TheNode.MoveTo(TreeView1.Items[x], naAddChild); Break; end; end; end; end; var Root,AktNode : TTreeNode; i : Integer; begin DMHaupt.QHauptTreeView.First; Root := TTreeNode.Create(TreeView1.Items); Root.Text := 'Test'; Root.Data := nil; while not DMHaupt.QHauptTreeView.EOF do begin AktNode := TTreeNode.Create(TreeView1.Items); AktNode.Data := new(PView); PView(AktNode.Data).ID := DMHaupt.QHauptTreeView.FieldByName('ID').AsInteger; PView(AktNode.Data).ParentID := DMHaupt.QHauptTreeView.FieldByName('ParentID').AsInteger; DMHaupt.QHauptTreeView.Next; end; for i := 0 to TreeView1.Items.Count-1 do begin if Assigned(TreeView1.Items[i].Data) then begin if PView(TreeView1.Items[i].Data).ParentID <> 0 then MoveToParentNode(TreeView1.Items[i]); end; end; end; end. |
Re: Ausgeben von einer Datenbank mit TTreeView
Du musst die Prozedur natürlich auch aufrufen :roll:
Ausserdem, warum übergibts du der Prozedur einen Parameter TheView, wenn du intern trotzdem auf TreeView1 zugreifst. |
Re: Ausgeben von einer Datenbank mit TTreeView
Die Prozedur rufe ich ja im FormCreate auf, also kann das auch nicht das Problem sein.
Soviel ich weiss ist doch TheView und TreeView vom gleichen Typ, nicht?? |
Re: Ausgeben von einer Datenbank mit TTreeView
Wie sieht denn deine Query aus. Irgendwie scheinen da keine Daten gelesen zu werden.
|
Re: Ausgeben von einer Datenbank mit TTreeView
Hab ich mir auch schon gedacht,
aber leider kenn ich mich bei den SQL-Strings net so gut aus. Ich lese die Daten so ein:
SQL-Code:
[Edit] Ich verwende die Spalten ID, ParentID und Bezeichnung, wobei fuer den Anfang ID & ParentID vermutlich wichtiger sind [/Edit]
select * from TreeView
|
Re: Ausgeben von einer Datenbank mit TTreeView
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.
Meine SQL Abfrage ist
SQL-Code:
Dann lese ich die Datein in einen Select wg_1,wg_2,wg_3,wg_4,wg_5,wg_6,wg_7,wg_8,wg_9,wg_10 from warengruppen group by wg_1,wg_2,wg_3,wg_4,wg_5,wg_6,wg_7,wg_8,wg_9,wg_10
Delphi-Quellcode:
Ergebniss ist Fehlerhaft.
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; Siehe Bild. Wie kann man das Problem bei mir lösen? |
Re: Ausgeben von einer Datenbank mit TTreeView
Zitat:
Kann mir das jemand bitte erklaeren? Ich habe naemlich eine Tabelle mit folgenden Feldern: ID, CategoryID und Category und moechte das in einem TTreeView anzeigen lassen. Aber eigentlich nur die CategoryID und die Category. Vielen lieben Dank! |
Re: Ausgeben von einer Datenbank mit TTreeView
Das geht doch viel einfacher! Ich habe das Problem bei mir gelöst!
TTreeView.savetoFile(c:\cxyz.txt) und das speicherst du in die Tabelle ein. zeile für Zeile und in der Spalte 2 nimmst du dir die nummer aus eine Nummerkreisentabelle. Das klingt zwar kompliziert ist aber sehr einfach :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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