Gerelateerde bestanden koppelen en formulieren maken

Status
Niet open voor verdere reacties.
OctaFish goedemorgen,

Ik heb het formulier opnieuw gemaakt de keuzelijsten met invoervak waar maar 1 waarde moet worden ingevuld werken goed nu. Alleen de lijsten met meerde kolommen werken niet. Het gaat dan om de lijsten waar voornaam, tussenvoegsel en achternaam gescheiden opgeslagen zijn. Hoe kan ik dit oplossen?

Groeten,
ReijerdH
 

Bijlagen

  • Invoeren nieuwe componist.jpg
    Invoeren nieuwe componist.jpg
    43,6 KB · Weergaven: 27
  • Melding correcte invoer Componist.jpg
    Melding correcte invoer Componist.jpg
    29,4 KB · Weergaven: 29
  • Foutmelding.jpg
    Foutmelding.jpg
    38,3 KB · Weergaven: 25
Zodra je meerdere waarden wilt toevoegen (in de tabel onder de keuzelijst) dan zul je een apart formulier moeten gebruiken dat je dan opent met de code. Bij het sluiten van het formulier vraag je dan, net als bij de tabel, de ID op. Dat ziet er ongeveer zo uit:

Code:
Private Sub cboComponist_NotInList(NewData As String, Response As Integer)
Dim msg As String, CR As String, strSQL As String, Result As Variant
	CR = Chr$(13)
	If NewData = "" Then Exit Sub
		msg = "'" & NewData & "' staat niet in de lijst." & CR & CR
		msg = msg & "Wil je '" & NewData & "' toevoegen?"
		If MsgBox(msg, vbQuestion + vbYesNo) = vbYes Then
			DoCmd.OpenForm ("frmComponist"), , DataMode:=acFormAdd, WindowMode:=acDialog, OpenArgs:=NewData 
		End If
		'Op het formulier frmComponist vul je vervolgens alle velden in.
		Result = DLookup("[ComponistID]", "tblComponist", "[Achternaam]=""" & NewData & """")
		If IsNull(Result) Then
			Response = acDataErrContinue
		Else
			Response = acDataErrAdded
			Me.cboComponist = Result
		End If
	End If
End Sub

Een alternatief (niet zo mooi, vind ik) is om de query uit te breiden met de extra velden die je wilt toevoegen. Omdat je die gegevens nog niet hebt, moet je die eerst met inputboxen opvragen bij de gebruiker. Dat is minder veilig, omdat een gebruiker de inputboxen rustig leeg kan laten.
 
Ik ben een voorstander van de code, ik weet alleen niet waar ik heb aan moet koppelen? Ook bij "Bij niet in lijst"? Ik heb zoals je zei een query gemaakt die er zo uit ziet "SELECT tblArrangeur.ArrangeurId, tblArrangeur.AchternaamArrangeur, tblArrangeur.TussenvoegselArrangeur, tblArrangeur.AchternaamArrangeur, tblArrangeur.[AchternaamArrangeur] FROM tblArrangeur ORDER BY tblArrangeur.[AchternaamArrangeur];" Dat heb ik ook voor Componist gedaan. Alle vakken heb ik met cbo een zinvolle naam gegeven. Alleen ik zie nog geen 3 velden in het invoervak staan. Moet ik ook nog iets anders aanpassen? Groeten ReijerdH.
 
Als je naar de eerste regel code kijkt (de sub) dan zie je dat die triggert op de gebeurtenis NotInList (Bij niet in Lijst). Je hebt m.i. 3 keer het veld AchternaamArrangeur erin gezet. Lijkt mij dat het meer dit zou moeten zijn:
Code:
"SELECT ArrangeurId, AchternaamArrangeur, TussenvoegselArrangeur, VoornaamArrangeur FROM tblArrangeur ORDER BY AchternaamArrangeur;"
Een keuzelijst retourneert altijd maar één waarde (meestal het sleutelveld) dus dat is het veld dat je opslaat en opvraagt. De overige velden kun je wel laten zien op je formulier, door die uit de keuzelijst te lezen in een tekstvak. Met (in mijn voorbeeld) =cboComponist.Column(#). Waarbij # dan kolom-1 is.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan