AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ausgeben von einer Datenbank mit TTreeView
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgeben von einer Datenbank mit TTreeView

Offene Frage von "fruity"
Ein Thema von ZeroQool007 · begonnen am 30. Aug 2004 · letzter Beitrag vom 7. Apr 2006
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#11

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 10:40
Geht, unabhängig von der Sortierung:
Delphi-Quellcode:
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;
Aufruf mit:
  FillTreeView(DeineTreeViewKomponente,DeineAdoQuerry); Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 10:41
Zitat von Igotcha:
- 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)
Genau deswegen bin ich der Meinung, daß ein rekursiver Aufruf dieses Problem vermeidet. Wenn die Daten aber, wie du beschreibst, sortiert vorliegen, geht das andere auch. Davon würd ich jedoch nicht unbedingt ausgehen.

Gruß,
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 10:55
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.
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#14

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 12:30
Erstmal danke an euch alle, dass ihr so hilfsbereit seid! Ist echt klasse!

Hab mal den Quellcode von Leuselator getestet, aber keine Reaktion! 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.
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#15

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 12:42
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;
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#16

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 12:47
Ja, DB ist geöffnet bzw ADOQuery1 auf TRUE
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#17

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 12:52
Wenn ich mich recht erinnnere, gibt's in der Jedi-Lib eine TDBTreeView-Komponente.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#18

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 12:54
es gibt viele Komponente, aber dieses Problem soll mit der TTreeView KOmponente gelöst werden, wie ich es bereits erwähnt habe! Trotzdem thx
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#19

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 14:01
Die Tipp- und Umbenennungsarbeit solltest Du eigentlich schon selbst machen:
Delphi-Quellcode:
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.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#20

Re: Ausgeben von einer Datenbank mit TTreeView

  Alt 30. Aug 2004, 14:07
sorry, dachte, dass hätte ich bereits getan....weil der mir auch beim Kompilieren usw kein Fehler angezeigt hat....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 12:00 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