1.6k Aufrufe
Gefragt in Datenbanken von
Hallo,

ich habe folgende Frage (Access 03): Ich habe eine m:n Beziehung, die ich über zwei 1:n Beziehungen realisiert habe. Es geht um mögliche Einsatzbereiche von Mitarbeitern. Die Daten aus den beiden Basistabellen (Mitarbeiter und Einsatzbereich) sollen in Tabelle3 beliebig kombiniert werden. Das ist soweit auch kein Problem. Ich möchte aber jetzt, dass, wenn ich einen neuen Mitarbeiter hinzufüge, in Tabelle3 automatisch die zugehörigen Datensätze erzeugt werden. z.B. wird der Mitarbeiter Mustermann hinzugefügt (Einsatzbereiche gibt es A, B und C), dann sollen in Tabelle3 automatisch alle drei Datensätze (Mustermann - A, Mustermann - B, Mustermann - C) erzeugt werden.

Wie kann ich das umsetzen?

Danke und Gruß

4 Antworten

0 Punkte
Beantwortet von marie Experte (2k Punkte)
Ja, dürfte kein Problem sein, wenn Du in der Tabelle Mitarbeiter die ID über eine Autonummer beziehst.

Dann müsste ich noch wissen wo und wie Du einen neuen Datensatz anfügst. In dem Moment, wo eine neue Autonummer angefügt wird fügst Du in der Tabelle Einsatzbereich 3 neue Datensätze an mit derselben Autonummer und einmal A, einmal B und einmal C.

Also falls Du neue Datensätze mit code oder mit einem Button erstellst hängt man den Code einfach dahinter, wenn nicht prüft man beim Speichern eines Datensatzes, ob die anderen bereits da sind. Je nachdem wie Du den neuen Datensatz anfügst kann man die zugehörigen drei anderen gleich dazugesellen, eben mit code oder mit einer Anfügeabfrage

Aber irgendwie habe ich den Eindruck, dass das nicht sehr sinnvoll aufgebaut ist, wenn Du pro neuem Datensatz gleich 3 andere anfügen musst. Wäre das nicht eleganter gegangen?
Also wenn ich Dir weiterhelfen soll musst Du mal ein wenig deutlicher schreiben wie und wo Du neue Datensätze abfügst, oder aber ab wann Du die Zusatzdatensätze brauchst. Falls Du sie nicht direkt brauchst kann man die auch anlegen wenn Du sie brauchst oder bei jedem Start prüfen ob alle das sind, egal, da gibt es tausend Möglichkeiten, wünsch Dir halt eine :-)

gruß marie
0 Punkte
Beantwortet von
Hallo

Danke Marie, für dein Posting.
Also ich stelle es mir folgendermaßen vor: Über ein Formular soll es möglich sein, die Daten für einen neuen Mitarbeiter anzulegen (z.B. Name, Vorname und idealerweise über Häkchen in verschiedenen Kontrollkästchen die möglichen Einsatzbereiche). Über einen Button sollen die Daten übernommen werden.

In der Tabelle "Mitarbeiter" sollen Name und Vorname gespeichert werden (also 1 Datensatz mit einer Auto-ID). Zusätzlich würde ich dann die Daten aus den Kontrollkästchen in die 3. Tabelle übernehmen (mit dem dahinterhängen des Codes klingt logisch, das werde ich mal testen)
Aber irgendwie habe ich den Eindruck, dass das nicht sehr sinnvoll aufgebaut ist, wenn Du pro neuem Datensatz gleich 3 andere anfügen musst. Wäre das nicht eleganter gegangen?

Da bin ich zur Zeit ratlos und ich wüsste nicht, wie ich es anders gestalten sollte.
Zu deiner letzten Frage: Eigentlich möchte ich schon, dass die Daten direkt angefügt werden und somit auch in folgenden Abfragen und Auswertungen zur Verfügung stehen!

Danke nochmal für deine Mühe. Gruß Jonk :)
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Jonk,

hier mal mein Ansatz. Dein beschriebener n:m-Ansatz ist genau richtig für deine Problemstellung. Da eine Tabelle nicht auf Ereignisse reagiert, erstelle zunächste ein Formular mit der Mitarbeitertabelle (auch wenn es nur die Datenblattansicht ist). Beim Ereignis "Form_BeforeUpdate" solltest du prüfen, ob es sich um einen neuen Mitarbeiter (=neuen Datensatz) handelt (Tipp: Oldvalue = null). Danach solltest du beim Ereignis "Form_AfterUpdate" folgenden Befehl ausführen und dich auf das Ergebnis aus BeforeUpdate stützen (z.B. über eine lokale Variable):

Docmd.runsql "INSERT INTO Tabelle3 ( MA_ID, EB_ID ) SELECT Mitarbeiter.id AS MA_ID, Einsatzbereich.ID AS EB_ID FROM Mitarbeiter, Einsatzbereich WHERE (((Mitarbeiter.id)=" & me!ID & "))"


Falls nicht immer alle Einsatzbereiche in Frage kommen, könntest du über ein zusätzlichen Feld (aktiv) in der Tabelle Einsatzbereich die Selektion einschränken. Dafür bräuchstest du nur das WHERE-Kriterium entsprechend erweitern.

Hilft dir das?

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo Ralf,

danke auch für deinen Tipp und sorry für die späte Rückmeldung, ich war im Urlaub...

Die Anforderungen haben sich etwas geändert, aber ich hoffe, dass ich mit den entsprechenden Modifikationen deinen Vorschlag auch umsetzen kann. Ich werde das auf jeden Fall mal testen!

also nochmal danke!

Gruß, jonk
...