Hi,
das Problem kenne ich, hatte ich selbst vor Jahren, als ich mir ein Archiv für CDs, Schallplatten etc. angelegt habe. Plötzlich wollte ich alle Informationen, die man so bekommt, speichern. Und Tabelle verweist auf sich selbst geht gar nicht so schwer. Ich versuche mal, jetzt ordentlich zu erklären, wie ich das gelöst habe.
Ich habe zwei Tabellen:
Artist - hier sind sämtliche Künstler eingetragen
- Artist_ID
- Artist_Name
- ... sonstewas
ArtistByArtist - hier trage ich nur die IDs der Künstler ein und die Art der Verbindung etc.
- Artist_ID
- ByArtist_ID
- ...egal was für die Beziehung wichtig ist
Dann habe ich mir ein zweites Form angelegt, welches vom Hauptform aufgerufen wird.
Damit ist auch automatisch der erste Künstler festgelegt und dessen ID bekannt.
Auf dem zweiten Form habe ich dann sicherheitshalber oben noch mal den Namen des aufrufenden Künstlers vermerkt, damit ich das auch noch weiß, wenn ich im Hauptform schon andere Dinge tue.
Weiterhin liegt dort ein DBGrid, in dem die Einträge niedergelegt werden und eine DBLookupComboBox. Wenn ich aus der Look..Box einen Namen auswähle, dann wird er direkt ins Grid eingetragen. Und die Beziehungen stelle ich folgendermaßen her:
Dem DBGrid liegt eine
Query zugerunden mit folgender
SQL:
Delphi-Quellcode:
SELECT
Artist_ByArtist.*, Artist.Artist_Name, Artist_ID
FROM
Artist, Artist_ByArtist
WHERE
(ByArtist_ID = Number OR Artist_ID = Number)
AND
(Artist.Artist_ID <> Number
AND
(ByArtist_ID = Artist.Artist_ID OR Artist_ID = Artist.Artist_ID))
ORDER BY
Artist_Name
Den Parameter Number übergebe ich bei Aufruf des zweiten Forms.
Die Loo....Box nutzt folgende
Query:
Delphi-Quellcode:
SELECT
Artist_ID, Artist_Name
FROM
Artist
ORDER BY
Artist_Name
Das ganze klappt seit Jahren einwandfrei, hab allerdings 'ne Weile rumgefrickelt, bis ich es hatte und mir auch von schlauen Leuten helfen lassen.
Oh, beinahe hätte ich's vergessen, nutze
ADO und
ACCESS.
Gute Nacht!