Bij niet in lijst

Zie ook elders op deze site:

PCMenu Access Tips en trucs Programmavoorbeelden Access

Hebt u een vraag over Access, stel deze dan op een van de forums, bijvoorbeeld http://office.webforums.nl

(Deze tekst is geschreven voor de gevorderde Access-gebruiker.)

De methode Bij niet in lijst is lastig te doorgronden. Deze pagina geeft hier meer uitleg over.

Situatieschets:

U wilt vanuit een formulier in een Keuzelijst met invoervak een waarde kunnen zoeken uit een opzoektabel. Als de waarde niet in de opzoektabel staat, dan wilt u deze waarde toevoegen aan de opzoektabel.

U kunt hiervoor de Gebeurtenis Bij niet in lijst van de Keuzelijst met invoervak gebruiken. Zet de Eigenschap Alleen lijst op Ja. Gebruik voor de rijbron de opzoektabel. Let op: het sleutelveld moet het veld zijn dat u in de Keuzelijst met invoervak wilt weergeven, u kunt bij de methode Bij niet in lijst geen verborgen sleutelveld gebruiken.

In dit voorbeeld vult u de opzoektabel tblAanhef met de nieuwe waarde van de Keuzelijst met invoervak cboAanhef op het formulier frmNaam.

Code voor Access 2000 en XP

In Access 2000/XP kunt u gebruik maken van ActiveX Data Object (ADO) code:

Private Sub cboAanhef_NotInList(NewData As String, Response As Integer)
'Werkt alleen in Access 2000/XP (ADO)

Dim bytDoorgaan as Byte

bytDoorgaan = MsgBox("Wilt u " & NewData & " aan de lijst toevoegen?", vbDefaultButton1 + vbYesNo, "Aan lijst toevoegen")
If bytDoorgaan = vbYes Then

   ' Voeg record toe aan de opzoektabel tblAanhef
    Dim rst As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "Select * From tblAanhef"
    rst.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    With rst
        .AddNew
        !Aanhef = NewData
        .Update
    .Close
    End With

    Response = acDataErrAdded
    MsgBox "De aanhef "& NewData & " is toegevoegd aan de tabel Aanhef."

  Else
    Response = Empty
  End If

End Sub

Code voor Access 97

In  Access 97 kunt u alleen gebruik maken van DAO code. Deze code werkt ook in 2000/XP, maar dan moet u de verwijzing naar DAO aanzetten.

Private Sub cboAanhef_NotInList(NewData As String, Response As Integer)
Dim bytDoorgaan as Byte

 bytDoorgaan = MsgBox("Wilt u " & NewData & " aan de lijst toevoegen?", vbDefaultButton1 + vbYesNo, "Aan lijst toevoegen")
 If bytDoorgaan = vbYes Then
   ' Voeg record toe aan de opzoektabel tblAanhef
    Dim dbs As DAO.Database
    Dim rs As DAO.Recordset
    Set dbs = CurrentDb
    Set rs = dbs.OpenRecordset("tblAanhef")
    With rs
        .AddNew
        !Aanhef = NewData
        .Update
    End With
    rs.Close
    dbs.Close
    Response = acDataErrAdded
    MsgBox "De aanhef is toegevoegd aan de tabel Aanhef."
Else
        Response = Empty
 End If

End Sub