Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi m:n-Beziehung (https://www.delphipraxis.net/8492-m-n-beziehung.html)

TypusMensch 5. Sep 2003 18:38


m:n-Beziehung
 
Also ich will eine m:n-Beziehung gestalten.

Folgendermaßen:
Ich habe eine Tabelle mit Kunden, eine Tabelle mit Artikel.

Jedem Kunden können mehrere Artikel zugewiesen werden. Jeder Artikel von kann von verschiedenen Kunden gekauft werden.

Also habe ich am Ende drei Tabellen:

Kunden:
KNr (Schlüssel), Name
Artikel:
ANr (Schlüssel), Bezeichnung
KuArt:
ID (Schlüssel), KNr (Fremdschlüssel), ANr (Fremdschlüssel)

Das ganze soll wenn möglich mittels Access-Datenbank realisiert werden, wenn nötig auch Paradox.

Ich verstehe nicht, wie ich was bei den ADOTable eingeben muss, damit das klappt. Habe zwar schon was gemacht gehabt, aber das war dann am Ende nur 1:n Beziehung. Daher der "Trick" mit der Extra-Dritten-Tabelle... ich hab null Plan wie ich die aber da reinschreibe, ... die Daten

Hoffe, mir kann da jemand helfen.

MfG Marcus

MrSpock 5. Sep 2003 18:58

Re: m:n-Beziehung
 
Hallo TypusMensch,

das ist je weniger eine Frage von Einstellungen im TAdoTable Objekt. Du musst dir ein Design für die Anwendung überlegen. Du könntest z.B. einen Menüpunkt Stammdaten anlegen, über den du Kunden und Artikel getrennt anlegen kannst. Außerdem bietet dein Programm dann die Möglichkeit eine neue Bestellung zu erzeugen. Die Artikel wählst du aus z.B. aus einer Liste und für jeden Artikel, der in der Bestellung ist erzeugst du einen Eintrag in KuArt.

Je nachdem, wie du KuArt später sortierst, kannst du alle Kunden anzeigen lassen, die einen bestimmten Artikel gekauft haben oder alle Artikel, die ein Kunde (in einer bestimmten Bestellung oder insgesamt) bisher gekauft hat.

TypusMensch 6. Sep 2003 10:50

Re: m:n-Beziehung
 
nun gut, ich habe jetzt 2 tabellen auf meinem form. kann jetzt beliebig viele artikel und kunden erstma getrennt eingeben.

nun stellt sich mir aber die frage, wie und was muss ich nun für ADOTable setzen, damit ich nun in einem z.b. anderen form den kunden artikel zuordnen kann (folgich inner KuArt)???

MrSpock 7. Sep 2003 19:06

Re: m:n-Beziehung
 
Hallo TypusMensch,

wie gesagt, es hat eigentlich nichts mit einer Einstellung bei einem ADOTable Objekt zu tun. Aber angenommen du hast dem User die Möglichkeit eingeräumt, einen Kunden für eine neue Bestellung einzugeben, dann kannst du z.B. ein Formular öffnen, in dem der Benutzer Artikel auswählen und der Bestellung zuordnen kann. Hat der User einen Artikel und z.B. die Anzahl ausgewählt, kannst du einen neuen Eintrag in der Tabelle KuArt erzeugen:

Delphi-Quellcode:
KuArt.Append;
{ Falls ID in KuArt kein AutoInc Feld ist: }
KuArt.ID := AktBestellNr;
KuArtKNr.AsString := AktuellerKunde;
KuArtANr.AsString := ArtikelANr.AsString;
KuArtAnzahl.AsInteger := Menge;
...
KuArt.Post;
Zeigst du später eine bestimmte Bestellung an, kannst du KuArt z.B. filtern und weitere Lookupfelder aus der Artikeltabelle anzeigen.

TypusMensch 7. Sep 2003 19:19

Re: m:n-Beziehung
 
Alles klar, das Problem ist einfach "Datenbanken"... immer wieder ein Problem für mich... Hab's aber jetzt hinbekommen...

Ich denk halt anders:

1. Kunden.db (NORMAL)

2. KuArt.db - mit Master auf Kunden (KNr (Schlüssel von Kunden.db) = KNr (Fremdschlüssel von KuArt.db)

3. Artikel.db - mit Master auf KuArt (ANr (Schlüssel von KuArt.db) = ANr (Fremdschlüssel von KuArt.db)

So hätte ich es verstandnen :freak: (Ich weiß, voll kompliziert...)

ThX trotzdem.

Fingolfin 8. Okt 2003 23:09

Re: m:n-Beziehung
 
Zitat:

Zitat von TypusMensch
Alles klar, das Problem ist einfach "Datenbanken"... immer wieder ein Problem für mich... Hab's aber jetzt hinbekommen...

Ich denk halt anders:

1. Kunden.db (NORMAL)

2. KuArt.db - mit Master auf Kunden (KNr (Schlüssel von Kunden.db) = KNr (Fremdschlüssel von KuArt.db)

3. Artikel.db - mit Master auf KuArt (ANr (Schlüssel von KuArt.db) = ANr (Fremdschlüssel von KuArt.db)

So hätte ich es verstandnen :freak: (Ich weiß, voll kompliziert...)

ThX trotzdem.

Hi TypusMensch, ich stecke momentan bei einem ähnlichen Problem und da ich auch nicht unbedingt den Weg über SQL gehen möchte, würde mich deine Lösung interessieren. Aber so richtig schlau werde ich aus ihr nicht.

Sollte das hier:

3. Artikel.db - mit Master auf KuArt (ANr (Schlüssel von KuArt.db) = ANr (Fremdschlüssel von KuArt.db)

nicht so heißen?

3. Artikel.db - mit Master auf KuArt (ANr (Schlüssel von Artikel.db) = ANr (Fremdschlüssel von KuArt.db)

So sollte es meiner Meinung nach sein, so funktioniert es bei mir aber nicht, daß die Liste, die mit der dazugehörigen Datasource verbunden ist immer nur den ersten Eintrag (Detail) anstatt alle relevanten anzeigt.

Danke schonmal,

Fingolfin

Fingolfin 12. Okt 2003 00:54

Re: m:n-Beziehung
 
Hat denn niemand eine Idee? :cry:

Bitte Bitte.

Fingolfin

MrSpock 12. Okt 2003 08:20

Re: m:n-Beziehung
 
Hallo Fingolfing,

zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Dass du zwischen 00:09 Uhr und 01:54 Uhr keine Antwort bekommen hast, sollte dich nicht entmutigen :mrgreen: und nicht dazu hinreissen, gleich noch mal zu posten.

Wie ich bereits geschrieben habe, ist das so nicht machbar. KuArt ist ja eine n:m Beziehung, wenn du jetzt einen Kunden ausgewählt hast, hast du über die Master-Detail Beziehung alle Artikel dieses Kunden ausgewählt. Aber nur ein Datensatz ist ausgewählt. Wenn du jetzt eine Master-Detail Beziehung zwischen KuArt und Artikel herstellst, wird dir immer DER Artikel zum aktuellen Datensatz angezeigt! Was du aber machen könntest, ist ein zusätzliches Feld (über den Feldeditor) in KuArt anzuzeigen (z.B. Artikelbezeichnung) und dir dieses über Lookup aus der Artikeldatei zu holen. Dann bekommst du die Artikelinformationen gleich in KuArt mit angezeigt.

Fingolfin 12. Okt 2003 16:54

Re: m:n-Beziehung
 
Zitat:

Zitat von MrSpock
Hallo Fingolfing,
zunächst einmal herzlich willkommen im Delphi-PRAXIS Forum.

Hallo. :)

Zitat:

Zitat von MrSpock
Dass du zwischen 00:09 Uhr und 01:54 Uhr keine Antwort bekommen hast, sollte dich nicht entmutigen :mrgreen: und nicht dazu hinreissen, gleich noch mal zu posten.

Sorry, ich habe fast nur Nachts Zeit für den Rechner und wenn ich dann irgendwo stecken bleibe, bin ich gleich stark am Verzweifeln. Ich bin das nächste mal geduldiger.

Zitat:

Zitat von MrSpock
Wie ich bereits geschrieben habe, ist das so nicht machbar. KuArt ist ja eine n:m Beziehung, wenn du jetzt einen Kunden ausgewählt hast, hast du über die Master-Detail Beziehung alle Artikel dieses Kunden ausgewählt. Aber nur ein Datensatz ist ausgewählt. Wenn du jetzt eine Master-Detail Beziehung zwischen KuArt und Artikel herstellst, wird dir immer DER Artikel zum aktuellen Datensatz angezeigt! Was du aber machen könntest, ist ein zusätzliches Feld (über den Feldeditor) in KuArt anzuzeigen (z.B. Artikelbezeichnung) und dir dieses über Lookup aus der Artikeldatei zu holen. Dann bekommst du die Artikelinformationen gleich in KuArt mit angezeigt.

Jetzt hat es funktioniert. Vielen Dank. :-D

Das hat mich bald irre gemacht.
Obwohl ich mir gut vorstellen kann, daß diese Realisierung später stark unübersichtlich wird, werde ich doch so weitermachen.
Ich habe dasselbe auch mit SQL realisiert aber da habe ich starke Performance-Einbrüche beobachtet. :?: Ist das eigentlich normal?

Fingolfin

kiar 12. Okt 2003 18:12

Re: m:n-Beziehung
 
Zitat:

Obwohl ich mir gut vorstellen kann, daß diese Realisierung später stark unübersichtlich wird, werde ich doch so weitermachen.
deshalb sollte man sich vorher über das db design im voraus gedanken machen. damit andere auch später deine db pflegen können solltest du unbedingt mit sql arbeiten :spin2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz