Hallo Forumgemeinde,
ich bastel grad an einer DB zur Seminarverwaltung. Hierzu gibt es eine Tabelle Teilnehmer, eine Tabelle Veranstaltungen sowie eine Tabelle Buchungen in der die Veranstaltungsnr und die Teilnehmernr gespeichert wird (dafür gibt es die Teilnehmerabfrage).
Um jetzt die Teilnehmer der Veranstaltung zuzubuchen habe ich ein Hauptformular in dem ich die Veranstaltung aufrufe, darin eingebunden habe ich ein Unterformular (als Endlosformular) um die Teilnehmer zuzubuchen. Die Teilnehmer wähle ich über ein Kombinationsfeld aus.
Bis hier funktioniert auch alles einwandfrei.
Nun zu meinem Problem:
Ich möchte nun die Werteliste des Kombinationsfeld dahingehend eingrenzen, dass nur Teilnehmer angezeigt werden, die noch nicht zur ausgewählten Veranstaltung zugebucht wurden.
Im I-Net habe ich dazu auch schon etwas gefunden was genau dem entspricht:
Zitat (tech-archive.net):
Acc2000: in einem Endlos-Unterformular möchte ich in einem
Kombinationsfeld eine Namensliste zur Auswahl anbieten. Wenn ein Name
ausgewählt wurde, soll er für den nächsten Datensatz nicht mehr in der
Auswahl erscheinen.
Zunächst habe ich gedacht, dies mit einer SQL-Anweisung als RowSource
zu lösen, hab's aber nicht hingekriegt.
Dann habe ich die Namen in eine Werteliste gepackt und dem cboFeld als
RowSource zugewiesen mit der Absicht, die Werteliste per VBA zu
verändern -> Laufzeitfehler 2176: "Die Einstellung dieser Eigenschaft
ist zu lang." Die Werteliste darf wohl nur 2048 Zeichen lang sein,
meine Liste ist z.Zt. 2812 Zeichen lang. Also geht es so auch nicht.
Daher wird es wohl doch über SQL gehen müssen, so in etwa in der Form
"wähle einen Namen aus, der nicht schon in einem vorherigen Datensatz
ausgewählt worden ist". Könnt Ihr mir helfen, wie man so etwas
hinbekommt?
Thomas hat ja schon gesagt, daß es im Endlosform
problematisch ist.
Also mußt Du tricksen.
Du legst auf da Form ein Kombifeld(cboNachname) und genau über den
Textteil des Konbifeldes ein weiteres Textfeld(txtNachname), so daß
der Dropdownpfeil noch zu sehen ist.
Das Kombifeld hat als Rowsource zB:
SELECT
tblNamen.Nachname
FROM tblNamen
WHERE tblNamen.Nachname Not In
(select Nachname from tblVeranstaltung)
OR tblNamen.Nachname=[Forms]![frmVeranstaltung]![txtNachname]
ORDER BY tblNamen.Nachname;
Das Textfeld und das Kombifeld sind an das Feld 'Nachname'
gebunden.
BeimAnzeigen aktualisierst Du das Kombi:
Private Sub Form_Current()
Me.cboNachname.Requery
End Sub
Zitat ende!
Nun habe ich versucht den Rowsource auf meine DB anzupassen; herausgekommen ist dabei:
SELECT Teilnehmer.Nr, Teilnehmer.[T-Name], Teilnehmer.[T-Vorname]
FROM Teilnehmer
WHERE Teilnehmer.Nr
Not in (select Nr from Teilnehmerabfrage)
OR Teilnehmer.Nr=[Forms]![Buchungendetails]![txtNr]
ORDER BY [T-Name];
Die Werteliste ist jetzt aber so eingegrenzt, dass nur noch Teilnehmer angezeigt werden, die noch keiner Veranstaltung zugebucht wurden. (Es soll aber möglich sein, dass ein Teilnehmer zu mehreren Veranstaltungen zugebucht werden kann)
Danke im voraus für eure Hilfe
Hallo,
ZitatEs soll aber möglich sein, dass ein Teilnehmer zu mehreren Veranstaltungen zugebucht werden kann
Somit bnötigst du eine vollständige Liste der TN außer jener, die der aktuellen Veranstaltung zugebucht wurden.
SELECT Teilnehmer.Nr, Teilnehmer.[T-Name], Teilnehmer.[T-Vorname]
FROM Teilnehmer
WHERE Teilnehmer.Nr
Not in (select Nr from Teilnehmerabfrage WHERE VERANSTALTUNG = AKTUELLE VERANSTALTUNG)
OR Teilnehmer.Nr=[Forms]![Buchungendetails]![txtNr]
ORDER BY [T-Name];
Die Where-Klausel der Unterabfrage bitte deinen Gegebenheiten anpassen.
Sollte eigentlich die gewünschte Liste zeigen
8) genauso hab ich mir das vorgestellt :D
Dank Danke Danke
Herzliche Grüße und ein schöne WE