Hallo liebe Profis!
Ziel ist es, einer Musikprobe mehrere Musikanten über Listenfelder zuzuweisen, ohne dass ein Musikant zweimal in einer Musikprobe sein kann.
Ich habe ein Hauptformular Musikprobe mit einem Listenfeld lstMusikproben (darin ist das Datum gespeichert) und ein Listenfeld lstMusikanten (Liste der aktiven Musikanten aus einer Abfrage). Es besteht eine m:n Beziehung und daher habe ich eine Zwischentabelle angelegt, lstMus_MP, in der nur die Fremdschlüssel gespeichert werden.
Im Unterformular werden die ausgewählten Namen über den Fremdschlüssel aus der Zwischentabelle angezeigt.
Wie schaffe ich es, dass mir in lstMus_MP keine zwei identischen Datensätze gebildet werden, bzw. wenn ein Datensatz schon vorhanden ist, eine Meldung kommt (z.B. Musikant in dieser Musikprobe bereits vorhanden).
In lstMusikanten kann ich eine Mehrfachauswahl machen, in lstMusikprobe eine einfache Auswahl.
Folgende Programmierung für das Auslesen habe ich mir schon zusammengestümpert:
Private Sub cmdRueber2_Click()
Dim varZeile As Variant
Dim I As Integer
Dim rs As DAO.Recordset
If Me.lstMusikanten.ItemsSelected.Count = 0 Then
MsgBox "Bitte Musikant aus Liste auswählen!"
Else
End If
If IsNull(Me!lstMusikprobe) Then
MsgBox "Bitte eine Musikprobe auswählen!"
Exit Sub
End If
Set rs = CurrentDb.OpenRecordset("tblMus_MP")
For Each varZeile In Me!lstMusikanten.ItemsSelected
rs.AddNew
rs!mus_id_f = Me!lstMusikanten.ItemData(varZeile)
rs!mp_id_f = Me!mP_id
rs.Update
lstMusikanten.Requery
Me!frmMusikprobe_ufoMusikanten.Requery
Next varZeile
rs.Close
Set rs = Nothing
End Sub
Das funktioniert auch soweit, ausser die doppelten Datensätze in der Zwischentabelle.
Kann man das verstehen? Hat jemand eine Idee?
Vielen Dank!
Ibins
P.S. Ich benutze Access 2010 und bin absoluter Neuling auf dem Gebiet.
Hallo Ibinis,
kannst du mal eine Beispiel-db mit den relevanten Teilen und ein paar DS zum probieren hochladen?
Hab versucht die relevanten Tabellen, die Abfrage, Unterformular und Hauptformular herauszusuchen.
Hoffentlich klappt´s!
Hallo,
setze einen eindeutigen zusammengesetzten Index auf mus_id_f und mp_id_f
Hallo,
für einen Anfänger sieht das schon mal ganz gut aus. Der übliche Fehler (Datenmodellierung) wurde nicht begangen.
An dem Form und Ufo habe ich einige Änderungen vorgenommen (zB jetzt ungebunden). Schau dir das in Ruhe an und wenn Fragen auftauchen - frage ;).
@ Franz
hab ich in der Beispiel-db genauso gemacht ;)
Hi,
@Jürgen,
sowas traue ich Dir sofort zu ;-)))
Super! Herzlichen Dank!!!
Das hätte ich alleine nie gekonnt. Das gleiche Schema muss ich jetzt noch für Auftritte mit Gage machen, aber das sollte mit der guten Vorlage kein Problem sein.
"musikalische" Grüße
Wer sich zu früh freut,....
Irgendwo ist der Wurm drin. >:(
Hab alles nach besten Wissen Herumprobieren geändert und trotzdem funktioniert das Formular für die Zurordnung der Veranstaltungen nicht. Die Werte werden in die Zwischentabelle eingetragen, im Unterformular kann ich die Namen in der Layoutansicht sehen, aber ich komm nicht drauf, was da jetzt anders ist, als bei dem Formular für die Musikprobe.
Liegt das an den Änderungen am Form und Ufo, die ich nicht ganz durchschaue?
Würde mich über eine erneute Hilfe freuen!
Hallo,
und was hast Du jetzt für ein Problem ?
Das hast Du nicht beschrieben.
Bin ich ein Schussel... wollte eigentlich die die Datei anhängen...
Das Formular Veranstaltungen funktioniert nicht.
Entschuldigung!
Hallo,
es fehlt der Eintrag
[Ereignisprozedur]
in der Klick-Eigenschaft des Listenfeldes "lstVeranstaltung".
Das war´s! Eigentlich logisch, aber...
Danke nochmal!
Gruß
Barbara
Hallo meine lieben Helfer!
Es handelt sich jetzt zwar um ein anderes Problem, allerdings im gleichen Formular. Sollte ich da ein neues Thema aufmachen?
Jetziges Problem:
Ich möchte in dem Formular Musikprobe die Anzahl der teilnehmenden Musikanten anzeigen. Eine Abfrage habe ich erstellt. Das Ergebnis soll zum ausgewählten Datensatz in der Liste Musikprobe passen und entsprechend den Klicks aktualisiert werden. Allerdings passiert bei meinen VBA-Eingaben nichts. Es steht immer der erste Wert der Abfrage im Feld.
Hab mal wieder keine Ahnung wo ich ansetzten muss. Mein Debugger ist schon heissgelaufen. :-(
Hat jemand eine Lösung für mich?
Gruß
Barbara
Hallo Barbara,
die Datenquelle des Formulars steht in keiner Beziehung zu den Aktionen, die darin stattfinden.
Sie ist also entbehrlich. Statt dessen könntest du die Anzahl der teilnehmenden Musikanten mit Hilfe der DLookUp-Methode zur Anzeige bringen und das Textfeld nach jeder Änderung aktualisieren.
ZitatMein Debugger ist schon heissgelaufen
Das würde mich ehrlich interessieren, wie du das hingekriegt hast.
Danke für die Hilfe! Die Datenquelle habe ich gelöscht.
Immerhin bringe ich einen Wert aus der Abfrage jetzt schon in das Textfeld.
Private Sub lstMusikprobe_AfterUpdate()
Me!txtAnzahl_Musikanten = DLookup("[Anzahl von tblMusikant]", "qryAnzahl_Musikanten_MP")
Me!txtAnzahl_Musikanten.Requery
End Sub
Aber irgendwie klappt das noch nicht. Mir wird der erste Wert der Abfrage mitgeteilt. Wenn in der 1. MP keine Musikanten eingetragen sind, aber in der 2. MP 4 Musikanten da waren, dann steht trotzdem die Zahl 4 in meinem Textfeld. Wie muss ich was aktualisieren, damit das Listenfeld mit dem Textfeld auf die gleiche ID zurückgreift?
Bei mir macht´s einfach nicht "klick"! :-\
Hab´s geschnallt! :)
Me!txtAnzahl_Musikanten = DLookup("[Anzahl von tblMusikant]", "qryAnzahl_Musikanten_MP", "[mp_id]=" & Me!lstMusikprobe)
Me!txtAnzahl_Musikanten.Requery
Hi,
das Requery ist überflüssig, da gibt es nach der Wertzuweisung nichts mehr zu aktualisieren.