AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism 1:n Datenbank auslesen -> Menü erstellen

1:n Datenbank auslesen -> Menü erstellen

Ein Thema von Matt · begonnen am 19. Feb 2009 · letzter Beitrag vom 21. Feb 2009
Antwort Antwort
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#1

1:n Datenbank auslesen -> Menü erstellen

  Alt 19. Feb 2009, 13:22
Datenbank: MDB • Zugriff über: ADO
Hallo DPler,

ich sitze hier vor eine großen Datenbank (mdb) und habe keine Ideen, die mir gestellte Anforderung zu erfüllen
Vielleicht hat ja einer von Euch ein paar Anhaltspunkte, wie ich folgendes Problem angehen kann:

Die Datenbank enthält eine Menüstruktur (1:n) ich kenne die Tiefe nicht, diese ist auch unterschiedlich.
Die Daten sind folgendermaßen aufgebaut:

Feld ID = Counter
Feld NID = INT -> enthält die ID von dem Menüoberpunkt
Feld Name = TEXT -> Name des Menüs

Bisher war es so, dass auf einen Menüpunkt geklickt wurde und eine SQL Abfrage die entsprechenden Menüunterpunkte anhand der ID herausgesucht und angezeigt hat.
Jetzt möchte der Kunde aber ein statisches Menü, das einmalig ausgelesen und erstellt wird :-/

Mein Problem liegt darin, das ich die Tiefe nicht kenne und mir nichts einfällt, um das per SQL hinzubekommen!

Ich hoffe einer von Euch hat eine Idee!!!

Vielen Dank!

Grüße aus HH
Matt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.447 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 19. Feb 2009, 13:26
Sollte per Rekursion möglich sein, da es sich hier ja um einen klassischen Baum handelt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.717 Beiträge
 
Delphi XE Professional
 
#3

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 19. Feb 2009, 13:27
Hi!

Welche NID haben denn die Menüpunkte, die keinen Oberpunkt haben?
Wenn du die identifizieren kannst, dann könntest du doch quasi die Abfrage so behalten (also sozusagen den Klick auf den Menüpunkt ohne Ober-ID simulieren)

Oder denke ich ganz falsch?


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#4

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 20. Feb 2009, 11:52
Danke Ihr beiden, für Euer Interesse mir zu helfen!

Was Du jetzt genau mit Rekursion meinst, weiß ich leider nicht! Könntest Du da mal ins Detail gehen bitte? (wie man sowas über SQL hinbekommen kann meine ich )

Der erste Menüeintrag hat die NID 0 = root. Wie soll ich denn einen Klick per SQL simulieren?
Es geht darum, das beim Laden der Oberfläche der Baum einmalig erstellt werden soll und nicht wie jetzt durch einen Klick auf einen Eintrag, die nächste Unterebene erscheint :-/


Grüße Matt
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.717 Beiträge
 
Delphi XE Professional
 
#5

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 20. Feb 2009, 12:56
Hi!

Hmm, ich habe mich vllt. etwas unglücklich ausgedrückt, ich meinte im Prinzip das selbe wie Markus auch.
Ich versuche es nochmal anders. Also du hast doch jetzt wahrscheinlich eine SQL-Query, die dir zu einer gegebenen ID alle Kinder einsammelt und diese dann ins Menü baut, oder?

Wenn du jetzt hingehst und dir alle mit NID=0 raussuchst, hast du ja die oberste Ebene. Mit Klick simulieren meinte ich, du rufst jetzt die Prozedur auf, die zu gegebener ID die Kinder liefert, eben mit jeder ID der obersten Ebene. Sagen wir, du hast jetzt 10 Kinder bekommen. Dann rufst du wieder die Prozedur auf, diesmal jeweils mit der ID eines der Kinder usw. usf.

Aufhören kannst du, wenn du entweder alle Elemente hast (mitzählen) oder jedes Element keine Kinder mehr hat!


Ich hoffe, es ist jetzt etwas klarer - wenn nicht: fragen


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika
Online

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.252 Beiträge
 
Delphi XE4 Professional
 
#6

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 20. Feb 2009, 14:15
Hallo,

ich würde das anders machen.

Delphi-Quellcode:
type
  TDBMenuItem = class
    Id : Integer;
    PreId : Integer; // NID
  end;
Eine einzige Query liest die komplette Tabelle aus
und trägt die Daten (TDBMenuItem) in eine TList (oder was abgeleitetes)

Noch ein paar Methoden, u.a.

FillList(Id) // alle Items der Id laden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#7

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 20. Feb 2009, 17:52
jaa... ok...

das ist schon mal ein Gedankenanstoss!! Danke Euch beiden!

Ich versuche mal mein Glück und melde mich wieder.

Sollte jemand einen konkreteren Vorschlag haben bin ich dafür natürlich immer noch offen (*zeitspar*)

Gruß Matt
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#8

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 21. Feb 2009, 02:04
Ich glaub ich habs, danke fkerber, hast mich auf den richtigen Weg gebracht.

Hier das Ergebnis (Rohformat)

Delphi-Quellcode:

select * from bla where parentid = 0 <- dataset
getit(0,0)

Sub getit(id, parentid)
  Dim parent As DataRow
  Dim ParentTab As DataTable
  ParentTab = tsearch.Tables("select")
     For Each parent In ParentTab.Rows
   //erstelle was...
     getit(parent.Item(0), parent.Item(2))
     Next parent
end sub
Item(0) = ID
Item(2) = ParentID

Ich danke Euch!!!

Gruß Matt
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: 1:n Datenbank auslesen -> Menü erstellen

  Alt 21. Feb 2009, 15:02
@Matt: Kannst du uns noch verraten, wie du das konkret in Delphi aufrufst? Das würde mich sehr interessieren, danke.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf