AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei Tabel als Baum Darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Tabel als Baum Darstellen

Ein Thema von thklingler · begonnen am 3. Mai 2006 · letzter Beitrag vom 8. Mai 2006
Antwort Antwort
Seite 2 von 3     12 3      
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#11

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 14:41
Was deffinierst du als tvBaum?
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 14:42
tv ist oft die mnemonische Kennzeichnung des Variabletyps - hier TreeView.

marabu
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#13

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 15:01
Danke hab es hinbekommen, dass ist jetzt aber keine Datenintensivekomponente wozu brauche ich die dann?

Das BeginUpdate und EndUpdate wird bei mir angemault tvBaum enthält kein element diese Typs.

Wie bekomme ich nun heraus welchen eintrag der User gewählt hat?
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 17:01
BeginUpdate() und EndUpdate() sind Methoden von TreeView.Items - also tvBaum.Items.BeginUpdate() und es wird funktionieren. Sobald du einen Knoten auswählst wird das Ereignis OnChange() gefeuert - du musst nur entsprechenden Code dafür schreiben. Beim Befüllen des Baums solltest du den Primärschlüssel der Tabelle in der Eigenschaft Data des Knoten mitführen:

Delphi-Quellcode:
tn0 := tvBaum.Items.AddChildObject(nil,
         Table1.FieldByName('FIRMA').Text,
         Pointer(Table1.FieldByName('ID').AsInteger)
       );
Jetzt kannst du im Ereignis OnChange() recht einfach unterscheiden:

Delphi-Quellcode:
procedure TDemoForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
begin
  case Node.Level of
    0: // Hersteller
      Table1.Locate('ID', Integer(Node.Data), []);
    1: //Produkt
      Table2.Locate('ID', Integer(Node.Data), []);
  end;
end;
Das ist ohne datensensitive Komponenten, wie du schon richtig bemerkt hast.

marabu
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#15

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 17:19
Danke für die Hilfe läuft super,
aber wozu gibt es datenintensive Komponenten wenn man die Lösung ohne macht ?
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#16

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 17:59
Noch ein hoffentlich nicht so dumme Frage. Wie kann ich feststellen ob auf einen Root oder einen Child gecklickt wurde?
Da die Zeiger für die DB mitlaufen habe ich immer einen Bezeichner ausgwählt auch wenn der User nur auf einen Rootknoten gecklickt hat, ich zur weiter Verarbeitung aber einen ausgewählten Bezeichner brauche.
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 18:18
Die datensensitiven Komponenten gibt es seit D1. Durch die schematisierte Anwendung dieser Komponenten wird ein schnelles Erfolgserlebnis beim Erstkontakt sicher gestellt. Meine Sicht.

Der aktuelle Datensatz in der Tabelle kann ja ruhig beibehalten werden. Du schreibst von einem Root-Knoten - wieviele davon hast du und warum? Wenn ich auf Level 0 abfrage, dann gehe ich davon aus, dass alle Hersteller als Root-Knoten (auf der obersten Ebene) eingetragen wurden.

marabu
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#18

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 20:52
Ich dachte die Hersteller sind die Rootkonten, wenn das Prog Fertig ist werden ca. 10-15 Hersteller in der DB sein.

Noch was anderes ist mir aufgefallen, das Onchange Ereigins wird nicht ausgeführt wenn man von einem Unterpunkt auf einen Aufgeklappten Unterpunkt eines anderen Kontens klickt.

Währe es nicht besser das mitfühere des Pointers in das Onclickereignis zulegen? Da dieses immer bei einer Änderung vorhanden ist.
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: Zwei Tabel als Baum Darstellen

  Alt 5. Mai 2006, 21:12
Zitat von thklingler:
Noch was anderes ist mir aufgefallen, das Onchange Ereigins wird nicht ausgeführt wenn man von einem Unterpunkt auf einen Aufgeklappten Unterpunkt eines anderen Kontens klickt.
Wenn das bei dir so ist, dann läuft da etwas schief.

Zitat von thklingler:
Wäre es nicht besser das Mitführen des Pointers in das Onclick-Ereignis zulegen, da dieses immer bei einer Änderung vorhanden ist?
Nicht unbedingt, aber du solltest ruhig ein wenig damit experimentieren. Es gibt viele Stellen, die man in einer TreeView anklicken kann - und es gibt mehr als eine Maustaste. Das Ändern eines Knotens im Programm - ohne Mausklick - löst auch kein OnClick-Ereignis aus. Probiere einfach alles aus und mache dich mit der Komponente vertraut. Am Besten auch ohne Bezug zur Datenbank, sonst vermischst du unnötig zwei potentielle Problemfelder.

marabu
  Mit Zitat antworten Zitat
thklingler

Registriert seit: 1. Jan 2003
Ort: Bad Wurzach
47 Beiträge
 
Delphi 2006 Enterprise
 
#20

Re: Zwei Tabel als Baum Darstellen

  Alt 8. Mai 2006, 09:39
Du hast recht, das Onchange wird ausgeführt nur die Db wird nicht aktuallisiert.

Ich habe folgendes geändert um das zu testen:

Delphi-Quellcode:
procedure TForm1.tvbaumChange(Sender: TObject; Node: TTreeNode);

begin
Showmessage('jetzt');
   case Node.Level of
    0: // Hersteller
      DataModule2.TdbTable1.Locate('Hersteller_ID', Integer(Node.Data), []);
    1: //Produkt
      DataModule2.TdbTable2.Locate('Pr_ID', Integer(Node.Data), []);
  end;
Label1.Caption:=DataModule2.TdbTable1.FieldValues['Firma'];
Label2.Caption:=DataModule2.TdbTable2.FieldValues['Bezeichung'];
Label3.Caption:=IntToStr(DataModule2.TdbTable2.FieldValues['maxl']);
Label4.Caption:=IntToStr(DataModule2.TdbTable2.FieldValues['Breite']);

end;
Das Showmessage wird immer ausgeführt, die DB(Labels) werde nicht aktuallisiert. Warum ?


Zip mit Datendateien angehängt

An bei noch das TestProg als Zip da könnt ihr das Verhalten selbst sehen.
Angehängte Dateien
Dateityp: zip dbtestprojekte_204.zip (942,1 KB, 7x aufgerufen)
Thomas Klingler
www.setupprofis.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:49 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