Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi JvDBTreeView von Jedi (https://www.delphipraxis.net/95462-jvdbtreeview-von-jedi.html)

Chaoten-Joe 6. Jul 2007 22:44

Datenbank: Paradox7 • Zugriff über: BDE

JvDBTreeView von Jedi
 
Hallo zusammen,

ich bastle jetzt schon eine Weile an der DBTreeview-Komponente ... allerdings ohne Erfolg. Es werdem mir ganz einfach keine Knoten (und entsprechenden Daten angezeigt. In einem alten DP-Thema habe ich gelesen, dass das Zusammenspiel von
- DetailField
- MasterField
- ItemField und
- StartMaster
wichtig ist. Aber in welcher Zusammensetzung?

Konkretes Beispiel: In einer Datenbank sind verschiedene Links zu Dateien auf der Festplatte gespeichert. Felder sind z.B. "Dateiname", "Dateityp" und "Kategorie". Die Komponente soll mir nun bspw. folgende Konstellation anzeigen:

- Kategorie 1
- Dateiname 1
- Dateiname 2
- ...
- Kategorie 2
- Dateiname 1
- Dateiname 2
- ...

"Nichts genaues weiß man nicht" bisher. Die Jedi-Hilfe und Jedi-Demos liefern keine Infos und auf Google ist überfragt (okay ... es gab Suchergebnisse in russischer Sprache ...) ;-))

Wäre für einen Tipp sehr dankbar!

Nette Grüße
Christian

marabu 7. Jul 2007 13:08

Re: JvDBTreeView von Jedi
 
Hallo Christian,

die Komponente TJvDBTreeView dient der Darstellung einer rekursiven Beziehung (Stückliste, bill-of-material) in Form einer einzigen Tabelle. Solche Tabellen enthalten einen Fremdschlüssel, der auf einen anderen Record derselben Tabelle verweist. Deine Tabelle sieht mir nicht danach aus, deshalb würde ich eher eine gruppierte ListView, eine normale TreeView oder irgendein Grid verwenden.

Freundliche Grüße

haentschman 8. Jul 2007 22:10

Re: JvDBTreeView von Jedi
 
Hallo...

ich hatte auch so meine Schwierigkeiten...

Im Ansatz ist das Tabellendesign wichtig !

Deine Tabelle müßte etwa so aussehen:

4 Felder ... Bezeichnung1 (Integer), Bezeichnung2 (Integer), Bezeichnung3 (String), Icon (Integer) wobei die Feldnamen frei wählbar sind aber so verstehst du die Zuordnung besser.

in Bezeichnung1 legt TreeView die "Gruppe" ab als Integer, Bezeichnung2 die "Untergruppe" ,in Bezeichnung3 den Text und in Icon den Index aus deiner ImageList (mußt du selbst ablegen !)

in Bezeichnung3 würden dann sowohl deine Knotenbezeichnungen als auch dein Link (Dateiname)als Text
stehen...

Dann die Master- Detail Zuordnungen
Delphi-Quellcode:
JvDBTreeview1.ItemField:= 'Bezeichnung3';
JvDBTreeview1.MasterField:= 'Bezeichnung1';
JvDBTreeview1.DetailField:= 'Bezeichnung2';
JvDBTreeView1.IconField:= 'Icon';
! folgende Routine muß vorhanden sein, damit TreeView neue Datensätze anlegen kann...

Delphi-Quellcode:
procedure TForm1.TabelleXNewRecord(DataSet: TDataSet);
begin
  TabelleX['Bezeichnung1'] := JvBDEUtils.GetQueryResult(TabelleX.DatabaseName,
     'select max(Bezeichnung1) from "TabelleX.DB" ') + 1;
end;
Bedienung über TastenCode:
neue 'Gruppe' -- INSERT
neue 'Untergruppe' ---ALT+INSERT
löschen --- CTRL+ENTF

ich habe mir dann virtuelle Tastendrücke auf Buttons gelegt....

Ich hoffe geholfen zu haben :hi:

Chaoten-Joe 9. Jul 2007 23:23

Re: JvDBTreeView von Jedi
 
Na das sieht doch schon mal nicht schlecht aus für den Anfang. Vielen vielen Dank !!! :thumb:
Aber so ganz wie gewünscht funktioniert es dann doch noch nicht. :gruebel:
Denn leider baut dich das TreeView nicht "von allein auf". Bei jedem neu hinzugefügten Dokument wird bei Neuanlage die Kategorie "nicht definiert" hinterlegt. Der Benutzer muss es dann einer Kategorie zuordnen (in einer Combobox werden die bisher bekannten Kategorie via SQL bereitgestellt).

Aber das Treeview bleibt leer. :wall: Ich muss alle Kategorien "per Hand" via Taste INSERT anlegen. Dat muss doch irgendwie allein funktionieren wie beim DBGrid.
Und wenn ich neue Dokumente hinzufüge ändert sich im Treeview immer der Eintrag des Hauptknotens ... sehr mysteriös.

Normalerweise müssten beim Start alle Datensätze (Dokumente) im Treeview angezeigt werden:
Hauptknoten: Bsp. Kategorie 1
- Unterknoten: Datei 1
- Unterknoten: Datei 2
Hauptknoten: Bsp. Kategorie 2
- Unterknoten: Datei 3
- Unterknoten: Datei 4

Die Änderung eines Knotens (Bsp. Änderung der Kategorie oder des Dateinamens) müsste ich dann ja wieder einfach via SQL hinbekommen. .... Und hoffentlich übernimmt das Treeview das dann auch ...

:wiejetzt: Also: Wie kann ich das Treeview "etwas integllligenter" machen ... außer Datenbank mit SQL durchzuforsten und dann das Treeview zu füllen? Oder geht dat nur so "zu Fuß"??? :roll:

Viele Grüße
Christian

haentschman 10. Jul 2007 09:38

Re: JvDBTreeView von Jedi
 
Hallo...

das Eintragen der Knoten in die Datenbank funktioniert nur über die eingebauten INSERT Funktionen automatisch.

Wenn du dir die Datenbank anschaust siehst du, wie die Knoten abgelegt werden.

wenn ein Benutzer einen Datensatz hinzufügt ( von extern ) sollten die Knotenpunkte( sprich Positionen )
mit in die Datenbank eingetragen werden. Das läßt sich eigentlich nicht schwer realisieren...

Viel Spaß... :-D

Chaoten-Joe 11. Jul 2007 23:33

Re: JvDBTreeView von Jedi
 
:pale: Puuh! Unser Kleiner hält uns auf Trab! Wir haben vor 4 Wochen Nachwuchs bekommen. :love: Daher eine kleine Spätschicht ...

Danke nochmals für die guten Antworten! Ohne diese wäre ich gar nicht so weit gekommen!

Eine kleine Unklarheit besteht aber noch:
Wenn ich zu einem Hauptknoten einen Unterknoten anlege, wird dieser einwandfrei angezeigt ... allerdings nicht beim nächsten Start des Programms. Der Grund: Bei Bezeichnung1 und Bezeichnung2 (also den beiden Integer-Werten) wird keine Nummer gespeichert. Nun habe ich schon etwas experimentiert und habe beide Felder mit Nummern belegt ... Ohne Erfolg. Die gewünschte Baumstruktur wird nicht dargestellt. Benötige ich doch zwei separate Datenbanken? :gruebel:

Diese Komponente hat es aber echt in sich! Ich programmier' ja nun schon ne Weile ... aber sowas ... :pale:

Aller guten Dinge sind Drei.
Vielleicht kommt ja gleich die Erleuchtung :idea: ...

Lieben Dank für die Hilfe
Christian

haentschman 12. Jul 2007 07:26

Re: JvDBTreeView von Jedi
 
Neeee.... :-D steht alles in einer..

Guten Morgen... Glückwunsch nachträglich :P


wenn ich dich richtig verstehe hast du die Positionen manuell eingetragen.

Bezeichnung1 ist im Prinzip nur eine fortlaufende Nummer.
Bezeichnung2 bestimmt welcher Bezeichnung1 der Text untergeordnet ist.

wie speicherst du manuell ? Tabelle Post vergessen ? :gruebel:

PS: ich habe mir teilweise meine Tabelle mit einem Datenbank Editor verändert
( Positionen, Ergänzungen ) und keinerlei Probleme...


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