Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

ID für m:n verlinken wenn Datensatz noch nie verlinkt war

Begonnen von OPS, September 06, 2010, 14:34:31

⏪ vorheriges - nächstes ⏩

OPS

Hallo

Folgendes:
Ich habe 2 Haupttabellen (tbl1; tbl2)die zueinander eine n:m Beziehung haben. Verbunden sind sie durch eine dritte Tabelle (tbl3) die beide miteinander verbindet.
Jeder Datensatz in Tbl1 kann 0, 1 oder mehr "Partner" in Tbl2 haben

theoretisch:
tbl1<-m-------n->tbl2
praktisch
tbl1-n--1->tbl3<-1---m-tbl2

Es gibt getrennte Formulare für die Erstellung von Datensätzen in den beiden Tabellen und ein Formular FM_Connect in dem man die beiden Datensätze "verbinden" kann.

Das klappt auch alles problemlos.


Ich habe nun ein Formular FM_Partnerless gemacht, das eine Liste mit allen Datensätzen von tbl1 macht, die keinen Partner haben.
Auch das klappt problemlos.


Nun will ich für die einfachere Bedienbarkeit einen Button einrichten der FM_Connect öffnet, einen neuen Datensatz in tbl3 anlegt und in dem Formular bereits ID_tbl1 eingetragen ist, so dass ich nurnoch die ID_tbl2 ergänzen muss.
Das klappt aber nicht. Wenn ich entsprechend verlinke, wird jedes Mal FM_Connect leer geöffnet, so dass ich die Datensätze aus tbl1 und tbl2 von Hand auswählen müsste (gibt da entsprechende Kombinationsfelder).

So wie ich das vermute, müsste ich im VBA sagen:
"Öffne FM_Connect, lege einen neuen Datensatz an und setze für FK_tbl1 die ID_tbl1 aus dem FM_Partnerless."
Aber wie kriege ich das hin?

tbl3:
ID_tbl3
FK_tbl1 (ID als Foreign Key von Tbl1)
FK_tbl2 (ID als Foreign Key von Tbl2)


Hier noch ein Beispiel zur Vereinfachung:

tbl_Auto
tbl_Vorbesitzer
tbl_Connect

FM_Partnerless:
Listet alle Autos in denen der oder die Vorbesitzer noch nicht eingetragen sind.
Ich drücke auf:"Vorbesitzer zuweisen"
Das Formular FM_Connect öffnet sich, ein neuer Datensatz ist schon angelegt, und im Kombinationsfeld "cmb_Auto" steht bereits der vorher ausgewählte Corsa.
das Kombinationsfeld "cmb_Vorbesitzer" ist leer.

DF6GL

#1
Hallo,

so ganz kann ich Dir nicht folgen..


Was genau willst Du denn grundsätzlich machen?


Ich sehe die StammTabellen "tblAutos" und "tblVorbesitzer"   (warum "Vorbesitzer"?. Gibt es auch eine Tabelle "tblAktuellerBesitzer?).


Vermutlich soll jetzt einem Auto, das keinen (Vor)Besitzer hat, ein solcher zugewiesen werden.

Das könnte über ein Hauptform mit Datenherkunft zur Tabelle "tblAutos" und einem UFO-Steuerlement, das ein Endlosform mit Datenherkunft zur "tblConnect" anzeigt,  erledigt werden.


Der entspr. Besitzer könnte über ein im Endlosform eingebautes gebundenes Kombi erfolgen, das alle Besitzer auflistet.

Die Auswahl (Filterung") eines bestimmten Autos könnte über ein ungebundenes Kombifeld passieren, das als Datensatzherkunft eine Abfrage bekommt, die alle Auto-Datensätze ohne Besitzer liefert.



OPS

Mhm, nein das klappt noch nicht so richtig.

ZitatGibt es auch eine Tabelle "tblAktuellerBesitzer?).
Nein. Das Beispiel mit den Autos und den Vorbesitzern war nur zur Verdeutlichung. Jedes Auto kann eben mehrere Besitzer und jeder Besitzer mehrere Autos gehabt haben. In meinem Fall ist das Thema etwas komplizierter zu Erklären aber mir geht es ja nur um die Verlinkung.

ZitatWas genau willst Du denn grundsätzlich machen?

Einfach gesprochen:
Zwei Tabellen haben eine m:n Beziehung. Realisiert wird die durch eine dritte Tabelle die in der "Mitte" steht.

Im besten Fall hat jeder Datensatz der ersten Tabelle eine Verbindung zu mindestens einem Datensatz der zweiten Tabelle, über den Umweg der dritten Tabelle (weil auch mehr Verbindungen untereinander möglich sind).
Das ist auch alles kein Problem und funktioniert bereits.

ZitatVermutlich soll jetzt einem Auto, das keinen (Vor)Besitzer hat, ein solcher zugewiesen werden.

In der Realität könnte ein schlampiger Benutzer aber auch einen Datensatz in der ersten Tabellle geschaffen haben, der keine Verbindung zur zweiten Tabelle hat. Um den besser zu finden, habe ich eine Abfrage gemacht die in einem Formular angezeigt wird in der alle Datensätze der ersten Tabelle aufgelistet sind, die keinen "Partner" haben.
Das geht auch wunderbar.


Aber ab jetzt funktioniert es nicht:
Ich habe einen Button der das Formular öffnet in dem ich die Datensätze der beiden Tabellen miteinander verbinden kann. An dieses Formular übergebe ich die ID des Datensatzes, aber er überträgt sie nicht auf das Formular und öffnet es leer. Das ist auch nicht verwunderlich, denn normalerweise übergebe ich an das Formular die ID der dritten Tabelle (die in der Mitte).

Nun soll aber ein neuer Datensatz in der "mittleren" Tabelle angelegt werden (in dem Formular) und in diesem Formular soll der Datensatz aus Tabelle 1 schon voreingestellt sein.

Genau, das möchte ich eigentlich:
Ein neues Formular wird geöffnet, dieses erstellt einen neuen Datensatz der "mittleren" Tabelle, wobei in diesem Formular der übergebene Datensatz schon voreingestellt ist.

Ich habe ein Bild beigefügt, ich hoffe es verdeutlicht mein Problem.
In dem "blauen" Formular, klicke ich einen Datensatz an und dann auf den Zuweisen-Knopf.
Dann öffnet sich das "rote" Formular. Die dort erstellten Datensätze sind neue Datensätze in der mittleren Tabelle. Und in diesem Formular soll das vorher ausgewählte "Auto" bereits voreingestellt sein.

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

mhmm, ich denke, (mindestens) Dein Ablaufkonzept (Formularsteuerung) ist mürbe...


ZitatIn der Realität könnte ein schlampiger Benutzer aber auch einen Datensatz in der ersten Tabellle geschaffen haben, der keine Verbindung zur zweiten Tabelle hat.

Wieso ist das schlampig? Bedeutet doch nur, dass es ein Auto gibt, das keinen (Vor-) Besitzer hat (Wobei ich nicht einsehe, dass es zwischen "Besitzer" und "Vorbesitzer" einen Unterschied geben soll.)

ZitatUm den besser zu finden, habe ich eine Abfrage gemacht die in einem Formular angezeigt wird in der alle Datensätze der ersten Tabelle aufgelistet sind, die keinen "Partner" haben.

siehe mein Posting, letzter Satz.

ZitatAn dieses Formular übergebe ich die ID des Datensatzes, aber er überträgt sie nicht auf das Formular und öffnet es leer.

benutz das Openform-Argument "Openargs", um den (aktuell markierten) ID-Wert aus dem "blauen" Formular  an das "rote" Formular zu übergeben, der dann im Form_Load-Ereignis dem entspr. Formularfeld zugewiesen wird.

(Alle Objekte in einer DB haben einen eindeutigen Namen...   ::) )


btw:

theoretisch:
tbl1  <  -n:m-  >  tbl2
praktisch
tbl1    ---1:n---    tbl3    ---m:1---  tbl2