Entwickler-Ecke

Datenbanken - n:m Beziehung und zugriff


Fasi-Monster - Mo 07.10.02 17:40
Titel: n:m Beziehung und zugriff
Hallo, ich habe da ein Problem, daß mich zum Wahnsinn treibt.
Ich habe 2 Tabellen(Paradox7), die über eine Dritte(P7) in einer n:m Beziehung zueinander stehen sollen. Jetzt will ich mit Delphi zugriffe machen. Kann mir einer sagen wie dass funzt oder wo was interessantes steht? Im Delphibuch ist das ein bisschen umständlich erklärt. Geht das auch ohne SQL? Das kann doch nicht sooo schwer sein?!?
:evil:


bis11 - Mo 07.10.02 18:34

Ich habe im anderen Forum dazu einen Beitrag gefunden. Vielleicht hilft der Dir weiter http://www.swissdelphicenter.ch/de/forum/viewtopic.php?t=2236&highlight=beziehung


LCS - Mo 07.10.02 19:43
Titel: Re: n:m Beziehung und zugriff
Hi
Fasi-Monster hat folgendes geschrieben:
Geht das auch ohne SQL?

Leider nicht.
Fasi-Monster hat folgendes geschrieben:

Das kann doch nicht sooo schwer sein?!? :evil:

Ist es eigentlich auch nicht. Aber dazu müsste man ein bisschen mehr über deine Tabellenstruktur wissen. Poste doch mal grob wie die aussieht.

Gruss Lothar


MrSpock - Di 08.10.02 06:51

Hallo Fasi-Monster,

das geht auch ohne SQL ist aber dann etwas aufwendiger. Ein Möglichkeit wäre eine Master - Detail Beziehung zwischen der ersten Tabelle und der Tabelle, die die n:m Bedingung enthält. Beispiel: 1. Tabelle ist die Personentabelle, 3. Tabelle eine Tabelle mit Städten und die 2. hält die Beziehung Personen:Städte fest und heißt wohnteIn. Wenn du jetzt eine Master - Detail Beziehung zwischen Personen und wohntIn erstellst, erhälst du alle Datensätze aus 2, die dieser Person zugeornet sind. Problematisch ist jetzt die Beziehung zur 3. Tabelle. Hier könntest du zwar auch eine Master - Detail Beziehung herstellen, würdest aber dann nur die Stadt angezeigt bekommen, die zu der "aktuell gewählten" Beziehung aus wohntIn passt. Es kann aber immer nur einen aktuellen Satz geben. Also müsstest du entweder die wohntIn Tabelle (bzw. die durch die MD Beziehung "gefilterten" Sätze dort) in einer Schleife durchlaufen oder du wählst die Möglichkeit, die 3. Tabelle NICHT über Master - Detail mit der 2. zu verbinden, sondern die 3. nur zu filtern. Aber auch dazu musst du die 2. Tabelle in einer Schleife durchlaufen.

ODER du lernst halt doch SQL :mrgreen: .


Fasi-Monster - Di 08.10.02 14:02

:(
Sorry, ich hab im Moment ein Brett vor dem Kopf.
Hier ein guter Vergleich:
Alle Paradox 7
Eine Tabelle : Schauspieler_Tabelle
1. Spalte : ID als Zähler
2. Spalte : Name als Alpha
Eine Tabelle : Film_Tabelle
1. Spalte : ID als Zähler
2. Spalte : Titel als Alpha
Eine Tabelle : Beziehung_Tabelle
1. Spalte : ID als Zähler
2. Spalte : SID {Fremdschlüssel} als Int
3. Spalte : FID {Fremdschlüssel} als Int
Ich suche mir über eine DBLookUpComboBox eine Person aus und will, dass alle Film, in denen er mitspielt, in einem DBGrid (muß aber nicht) gezeigt werden.
Also Tabel und DataSource für die DBLook...
Query + DataSource2. DBGrid mit DataSource2 und hinter´nen Button : ???
Bitte helft mir, das Seil hab ich schon geknüpft... :lol:


LCS - Di 08.10.02 14:18

Hi
Fasi-Monster hat folgendes geschrieben:

Sorry, ich hab im Moment ein Brett vor dem Kopf.

Haben wir doch alle öfter mal :D

Also, in die Query kommt folgende SQL-Anweisung:

Quelltext
1:
2:
3:
4:
SELECT F.TITEL 
FROM Beziehung B
JOIN Filme F on (F.ID = B.FID) <== nachträglich korrigiert!!
WHERE B.SID = :ID

In den Eigenschaften Params der Query legst du für den Paramter ID den Datentyp Integer und Input fest.

Für den Button:

Quelltext
1:
2:
3:
  Query.Active := False;
  Query.ParamsByName('ID').Value := DBLookupCombo1.KeyValue;
  Query.Active := True;


Ich hab das jetzt net getestet, aber eigentlich sollte es funktionieren.

Gruss Lothar


Fasi-Monster - Mi 09.10.02 14:12

:wink:
Alle Achtung Lothar,
ich glaube, ich brauche noch länger um diesen Stand zu erreichen.
Jedenfalls : Danke


LCS - Mi 09.10.02 14:15

Na ja, ich mach ja auch schon seit Jahren fast nix anderes mehr als Datenbank-Programme 8)

Gruss Lothar