En om de twee technieken nog even uit te leggen, hier wat meer info.
De eerste techniek is simpel: je voegt de nieuwe waarde toe aan een tabel. Dat gaat zo:
Code:
Private Sub kzl_merk_NotInList(NewData As String, Response As Integer)
If NewData = "" Then Exit Sub
Msg = "'" & NewData & "' staat niet in de lijst." & vbCr & vbCr
Msg = Msg & "Wil je deze toevoegen?"
i = MsgBox(Msg, vbQuestion + vbYesNo, "Onbekende naam . . ")
If i = vbYes Then
strSQL = "INSERT INTO tbl_merk ([Merk]) VALUES ('" & NewData & "');"
CurrentDb.Execute strSQL, dbFailOnError
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub
Je gebruikt dus een Toevoegquery om het nieuwe record aan te maken. Met Response stel je de keuzelijst opnieuw op scherp.
Bij een formulieraanroep moet er iets meer gebeuren. Dat ziet er zo uit:
Code:
Private Sub Achternaam_NotInList(NewData As String, Response As Integer)
Dim Msg As String
If NewData = "" Then Exit Sub
Msg = "'" & NewData & "' Deze Achternaam bestaat niet." & vbCrLf & vbCrLf
Msg = Msg & "Wil je " & NewData & " toevoegen?"
If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
DoCmd.OpenForm "frm_medewerkersAannemers", , , , acAdd, acDialog, NewData
End If
Me.Achternaam.Requery
End Sub
Je doet weer hetzelfde, checken of de waarde bestaat en een Msgbox openen met de vraag of het record moet worden toegevoegd. Alleen open je nu een formulier (in acDialog modus om te voorkomen dat de gebruiker ondertussen wat anders gaat doen). Dat krijgt onderstaande code, waarin de OpenArgs variabele wordt uitgelezen en de getypte waarde in het juiste veld wordt gezet. Tenslotte had de gebruiker de naam al ingevoerd.
Op het formulier zie je dan deze gebeurtenis die de variabele uitleest:
Code:
Private Sub Form_Load()
If Me.OpenArgs <> "" Then
Me.Achternaam = Me.OpenArgs
End If
End Sub
De eerste techniek is simpel: je voegt de nieuwe waarde toe aan een tabel. Dat gaat zo:
Code:
Private Sub kzl_merk_NotInList(NewData As String, Response As Integer)
If NewData = "" Then Exit Sub
Msg = "'" & NewData & "' staat niet in de lijst." & vbCr & vbCr
Msg = Msg & "Wil je deze toevoegen?"
i = MsgBox(Msg, vbQuestion + vbYesNo, "Onbekende naam . . ")
If i = vbYes Then
strSQL = "INSERT INTO tbl_merk ([Merk]) VALUES ('" & NewData & "');"
CurrentDb.Execute strSQL, dbFailOnError
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub
Je gebruikt dus een Toevoegquery om het nieuwe record aan te maken. Met Response stel je de keuzelijst opnieuw op scherp.
Bij een formulieraanroep moet er iets meer gebeuren. Dat ziet er zo uit:
Code:
Private Sub Achternaam_NotInList(NewData As String, Response As Integer)
Dim Msg As String
If NewData = "" Then Exit Sub
Msg = "'" & NewData & "' Deze Achternaam bestaat niet." & vbCrLf & vbCrLf
Msg = Msg & "Wil je " & NewData & " toevoegen?"
If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
DoCmd.OpenForm "frm_medewerkersAannemers", , , , acAdd, acDialog, NewData
End If
Me.Achternaam.Requery
End Sub
Je doet weer hetzelfde, checken of de waarde bestaat en een Msgbox openen met de vraag of het record moet worden toegevoegd. Alleen open je nu een formulier (in acDialog modus om te voorkomen dat de gebruiker ondertussen wat anders gaat doen). Dat krijgt onderstaande code, waarin de OpenArgs variabele wordt uitgelezen en de getypte waarde in het juiste veld wordt gezet. Tenslotte had de gebruiker de naam al ingevoerd.
Op het formulier zie je dan deze gebeurtenis die de variabele uitleest:
Code:
Private Sub Form_Load()
If Me.OpenArgs <> "" Then
Me.Achternaam = Me.OpenArgs
End If
End Sub