Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ibins am März 19, 2016, 14:50:08

Titel: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 19, 2016, 14:50:08
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.
   



Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: el_gomero am März 19, 2016, 18:10:18
Hallo Ibinis,

kannst du mal eine Beispiel-db mit den relevanten Teilen und ein paar DS zum probieren hochladen?
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 19, 2016, 18:52:29
Hab versucht die relevanten Tabellen, die Abfrage, Unterformular und Hauptformular herauszusuchen.
Hoffentlich klappt´s!
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: DF6GL am März 19, 2016, 20:25:09
Hallo,

setze einen eindeutigen zusammengesetzten Index auf mus_id_f und mp_id_f
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: el_gomero am März 19, 2016, 20:27:55
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 ;).
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: el_gomero am März 19, 2016, 20:28:43
@ Franz

hab ich in der Beispiel-db genauso gemacht ;)
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: DF6GL am März 19, 2016, 20:30:50
Hi,

@Jürgen,

sowas traue ich Dir sofort zu   ;-)))
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 19, 2016, 20:48:16
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
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 19, 2016, 23:25:55
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!
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: MzKlMu am März 19, 2016, 23:53:53
Hallo,
und was hast Du jetzt für ein Problem ?
Das hast Du nicht beschrieben.
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 20, 2016, 00:26:08
Bin ich ein Schussel... wollte eigentlich die die Datei anhängen...
Das Formular Veranstaltungen funktioniert nicht.

Entschuldigung!
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: DF6GL am März 20, 2016, 07:39:07
Hallo,

es fehlt der Eintrag
[Ereignisprozedur]
in der Klick-Eigenschaft des Listenfeldes "lstVeranstaltung".
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 20, 2016, 17:03:12
Das war´s! Eigentlich logisch, aber...
Danke nochmal!

Gruß
Barbara
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 23, 2016, 22:06:22
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
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: MaggieMay am März 23, 2016, 23:59:26
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.
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 24, 2016, 11:20:17
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"!  :-\

Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: ibins am März 24, 2016, 11:53:05
Hab´s geschnallt!  :)
Me!txtAnzahl_Musikanten = DLookup("[Anzahl von tblMusikant]", "qryAnzahl_Musikanten_MP", "[mp_id]=" & Me!lstMusikprobe)
Me!txtAnzahl_Musikanten.Requery
Titel: Re: Listenfeld mit Mehrfachauswahl erzeugt doppelte Datensätze
Beitrag von: MaggieMay am März 24, 2016, 12:06:22
Hi,

das Requery ist überflüssig, da gibt es nach der Wertzuweisung nichts mehr zu aktualisieren.