Autor Beitrag
LeoNevic
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.08.02 11:30 
Salut,
ich suche nach einer Möglichkeit gescheit durch meinen Datenbank-Katalog zu brausen.
Bsp.
3 Tabellen
a) Kont_ID; Kontinent
b) Land_ID; Land; Kont_ID
c) Stadt_ID; Stadt; Land_ID

Ich möchte nicht mit dem DB-Navigator durch Tab(c) browsen und mir sukkzessive die übergeordneten Daten anzeigen lassen, sonder suche nach einer Möglichkeit, von oben nach unten in drei Comboboxen, zunächst Kontinent, dann Land und dann die Stadt auszuwählen und die Auswahl auf den letztendlichen Stadt-Datensatz einzuschränken.
Ideen zur Realisierung?

Beste Grüße, vielen Dank
Leo
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Mi 14.08.02 11:48 
Vielleicht so :

ausblenden Quelltext
1:
SELECT * FROM Tabelle_Kontinet WHERE Kontinent = Combobox1.TEXT, Land = Combobox2.Text, Stadt = Combobox3.Text					


Dazu muß es eine Verknüpfung zwischen den einzelnen ID's der einzelnen Tabellen haben.
LeoNevic Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.08.02 13:17 
Hi bis11,

hab Dank Deine prompte Antwort. Nun die Sache ist die, derzeit führe ich schon eine SQL-Abfrage in folgender Form aus :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Select k.Kont_Name, k.Kont_id from 
Kontinent.db k, 
Laender.db L, 
staedte.db s 

where K.Kont_ID=L.Kont_ID
and 
L.Land_ID = s.Land_ID '


Die Ergebnismenge der SQL, also alle Kontinente auf die Fremdschlüssel aus "Städte" via "Länder" verweisen, fütter ich dann in eine LookUpList, deren ListSrc eben diese SQL ist, ListField ist Kont_Name und KeyField bleibt frei, ebenso wie DataSrc und DataField.
Das nur deshalb, weil ich keinen Bock habe, sie per Hand da reinzuschreiben.
Natürlich ist das nicht im Sinne des Erfinders und ich weiß auch nicht, ob ich deshalb Arbeitsspeicherprobleme kriege.

Doch nochmal konkreter zum eigentlichen Problem:
Wie krieg ich die Werte einer SQL-Menge in ein Listen-Anzeigefeld, so daß ich ähnlich wie im TDBStringGrid durchscrollen und pointiert(!) einen Datensatz anspringen kann. Also quasi ein Stringgrid mit nur einer Spalte in Form einer Listbox? :roll:
LeoNevic Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 14.08.02 13:30 
Alles auf zurück,

ich will nochmal präzisieren, in der Kontinent-Tabelle gibt es auch Kontinente die kein Land und in der Land-Tabelle Länder die keine Stadt enthalten. Diese müssen da auch drinstehen für andere Nicht-Stadt-Objekte die Abfragen durchführen.

Der Inhalt dieser Tabellen MUSS also - für die Auswahl von Städten -so gefiltert werden, daß nur Kontinente und Länder MIT Fremdschlüsselverweisen aus der Tabelle Stadt angezeigt werden.
Es ist also nicht damit getan, alle Einträge mit den Namen von Kontinenten oder Ländern anzuzeigen. Wenn ich mich nach unten durchhangel, will ich auch irgendwann bei ner Stadt ankommen.

Sonst bleibt alles so wie eben schon beschrieben.
Puh

Leo
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 14.08.02 14:13 
Hallo,

also wenn ich das richtig verstehe musst du die Liste der jeweils nächsten Combobox im OnChange ereignis der vorherigen füllen.

Also im OnChange deiner Kontinet ComboboBox (hier ändert sich die Liste nie) müsste der Code Inedwar so aussehen (verbesserungen und Fehlerabfang düberlasse ich dir ;)).
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure KontinentComboChange(Sender : tObject);
begin
  LaenderComboBox.Items.Clear;
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT a.LAND FROM Laender a, Kontinet b');
  Query1.SQL.Add('WHERE b.Kontinent=' + KontinentComboBox.Text + 
                           ' AND b.KontID=a.Kont_ID');
  Query1.Open;
  WHILE NOT Query1.EOF DO 
    LaenderComboBox.Add(Query1.FieldByName('Land').AsString);
end;


Die StäteCombobox füllst du äquivalent im OnCange der Länderkombobox.

Gruß
Klabautermann
LeoNevic Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 15.08.02 11:19 
Hi Klabauter, hi bis11,

Habt Dank für die prompten Antworten, ich habs jetzt eher bescheiden, dafür aber flink lösen können.
In der Tat hab ich das Augenmerk auf die OnChanges einfacher ComboBoxen gelegt und die Navigation über den ausgewählten Itemindex realisiert
Also bei Auswahl:
SqlIrgendwas.RecNo:=Pred(CBIrgendwas.ItemIndex) gesetzt.

Falls es interessiert.
Also Dank nochmal.