Problem: Datenbankabfrage in Treeview anzeigen
-
Hi Leute, sorry für meine Frage, aber mein Problem scheint simple und dennoch komme ich nicht auf die richtige Lösung.
Ich habe eine Access Datenbank mit 2 Tabellen : Kategorie , CD_Name
Als Beispiel:
In der Tabelle Kategorie befinden sich zum Bsp. Tabelle "Test1" und "Test2".
Zur Tabelle "Test1" gehört die CD "CD1" und zur Tabelle "Test2" gehört die "CD2".Jetzt wollte ich die Datenbank in ein Treeview einlesen, dass mir solch einen Baum liefert:
*Test1 -CD1 *Test2 -CD2
leider funktioniert das ganze nicht richtig,
Query1->SQL->Clear(); Query1->SQL->Add("SELECT Kategorie,CD_Name"); Query1->SQL->Add("FROM Kategorie,CD"); Query1->Open(); Query1->First(); while(!Query1->Eof){ for (int i =0 ; i < Query1->FieldCount; i++){ TreeView1->Items->Add(TreeView1->TopItem,Query1->FieldByName("Kategorie")->AsString); TreeView1->Items->AddChild(TreeView1->Items->Item[i],Query1->FieldByName("CD_Name")->AsString); Query1->Next(); } }
kann mir einer weiterhelfen? , vielen dank!!!
gerd
-
"Funktioniert nicht" ist keine ausreichende Fehlermeldung oder Problembeschreibung.
-
Hallo Gerd,
ich nehme mal an du willst einer Musik-CD eine Kategorie zuweisen.
In deiner Access Datenbank hast du ja schon die Tabellen
Kategorie und CD angelegt, nur woher soll jetzt eine CD wissen
welcher Kategorie sie angehört? Denn mitQuery1->SQL->Add("SELECT Kategorie,CD_Name"); Query1->SQL->Add("FROM Kategorie,CD");
erreichst du das nicht, deshalb brauchst du noch eine Zuordungen bzw. eine
Verknüpfung der Tabellen.Tabellen evtl. so aufbauen
Kategorie CD idkategorie Autowert Primärschlüssel --- idcd Autowert Primärschlussel Kategorie Text |-1:n --> idkategorie Integer CD_Name Text
wenn du nun eine neue CD erstellst musst du der CD.idkategorie den Kategorie.idkategorie der gewünschten Kategorie zuweisen.
Deine Abfrage auf den Tabellen würde dann so aussehen
(wenn deine CD immer einer Kategorie zugeordnet währe)Query1->SQL->Add("SELECT Kategorie, CD_Name"); Query1->SQL->Add("FROM Kategorie, CD"); Query1->SQL->Add("WHERE CD.idkategorie=Kategorie.idkategorie"); Query1->SQL->Add("ORDER BY Kategorie");
falls es CD's ohne Kategorie geben soll musst du JOIN verwenden ala
SELECT Kategorie, CD_Name
FROM Kategorie RIGHT JOIN CD ON Kategorie.idkategorie = CD.idkategorie
ORDER BY Kategorieund zu
while(!Query1->Eof) { for (int i =0 ; i < Query1->FieldCount; i++) { TreeView1->Items->Add(TreeView1->TopItem,Query1->FieldByName("Kategorie")->AsString); TreeView1->Items->AddChild(TreeView1->Items->Item[i],Query1->FieldByName("CD_Name")->AsString); Query1->Next(); } }
- schau dir in der Hilfe an was FieldCount macht
- wiso eine for Schleife noch zusätzlich?
- schau mal genauer hin wo dein Query1->Next(); steht
-
Hi Jansen, sorry,
folgendes Problem:
Ich habe ja wie bereits oben gepostet mehrer Kategorien.
Aber alles wird in den ersten Knotenpunkt reingeschrieben.es erscheinen zwar CD1 und CD2 als Kategorie im Treeview, aber alle Unterkategorien erscheinen nur im ersten Knotenpunt (CD1).
Ich habe bereits auch die Abfrage geändert (die Tabellen verknüpft) aber ich denke das Problem ist die schleife.
Danke für Hilfe
Gerd
-
Sorry VergissEs, da haben sich wohl unser Posts überschnitten
Ja, es geht um eine Musik CD Geschichte. Ich wollte diese komfortable in einer Datenbank verwalten.
Die Datenbank selber besteht aus 3 Tabellen. Also das mit den Beziehungen denke ich mal, bekomme ich noch hin. Mir ging es erstmal um das Treeview Problem.
Danke
Gerd
-
zu
VergissEs schrieb:
- schau dir in der Hilfe an was FieldCount macht
- wiso eine for Schleife noch zusätzlich?
- schau mal genauer hin wo dein Query1->Next(); stehtHast du dir schon mal die Frage gestellt was du mit
for (int i =0 ; i < Query1->FieldCount; i++)
erreichen willst? bzw. haste schon mal in die Hilfe geschaut was FieldCount
(macht wie oben schon erwähnt).
Schau nochmal ganz genau hin wo dein Query1->Next(); steht, innerhalb der for Schleife, soll das richtig sein ?ich will dich nur anstupsen das du auf deine gedankenfehler selbst kommst