Een tekstvak koppel je zo aan een keuzelijst: geef de regel <Besturingselementbron> deze formule =[cboTrainer].[column](2). In dit geval heet mijn keuzelijst cboTrainer, en bevat de derde kolom de waarde die ik wil zien.
Verder heb ik een trucje bedacht voor je meervoudige keuzelijst, waar je gewoon veel te weinig mee kan doen, met dank aan Microsof... Ik heb nu een oplossing waarbij je een tweede niet-gebonden keuzelijst met invoervak gebruikt die de geselecteerde waarden uit de eerste lijst haalt. Ik heb er twee plaatjes van gemaakt ter illustratie. De meervoudige keuzelijst (de linker dus) heeft dit als Rijbron:
Code:
SELECT [Instructeur nr], [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel] AS Naam, [ranking-groep] FROM tblInstructeurs
WHERE ([uit dienst] Is Null) ORDER BY [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel];
De meervoudige instelling staat uiteraard in de tabel ingesteld, en hij laat dus netjes de lijst zien met de selectievakjes.
De tweede keuzelijst wordt gevuld met de gekozen waarde uit de eerste keuzelijst. Dat gaat als volgt:
Code:
SELECT [Instructeur nr], [achternaam] & ", " & [Instructeur voornaam] & " "+[tussenvoegsel] AS Naam, Adres, TrainingID
FROM tblInstructeurs INNER JOIN tblTrainingen ON tblInstructeurs.[Instructeur nr] = tblTrainingen.TrainerID.Value
WHERE ((TrainingID=[Formulieren]![fTrainingen]![TrainingID]) AND ([uit dienst] Is Null));
De tweede keuzelijst haalt dus de sleutelwaarden
voor het geselecteerde record ([TrainingID]) op uit de tabel Instructeurs. Omdat je natuurlijk ook waarden moet kunnen veranderen, en de tweede keuzelijst dat niet automatisch doet, moet je nog een gebeurtenis aan die keuzelijst hangen. Deze actie is genoeg.
Code:
Private Sub cboTrainer_Enter()
Me.Dirty = False
Me.cboTrainer.Requery
End Sub
Hiermee sla je het record op, en wordt de keuzelijst ververst. En omdat de keuzelijst ook bij het openen van een willekeurig record de juiste waarden moet laten zien, gebruik je onderstaande code:
Code:
Private Sub Form_Current()
Me.cboTrainer.Requery
End Sub
Waarom zou je deze constructie gebruiken? Omdat ik nu nog niet weet hoe je een actie kunt hangen aan een meervoudig veld (de standaard handelingen doen niks) en bij de gewone keuzelijst werkt dat wel. Je kunt dus een formulier openen op basis van een persoon die je in cboTrainer selecteert. Kortom: het kan wel, met een beetje moeite!