Naar een specifieke record verplaatsen vanuit een keuzelijst met invoervak in Microsoft Access

Gemiddeld: vereist basisvaardigheden voor macro's, codering en interoperabiliteit.

Dit artikel is van toepassing op een Microsoft Access-databasebestand (.mdb) of op een Microsoft Access-databasebestand (.accdb).

Samenvatting

In dit artikel worden vier methoden beschreven voor het verplaatsen naar een specifieke record op basis van een keuzelijst met invoervak. De methoden zijn als volgt:

  • Voer in de afterupdate-gebeurtenis van een keuzelijst met invoervak code uit die gebruikmaakt van de methode FindFirst.
  • Roep in de gebeurtenis AfterUpdate van een keuzelijst met invoervak een macro aan waarmee de eigenschap Filter van een formulier opnieuw wordt opgeslagen.
  • Gebruik een formulier/subformulier met een keuzelijst met invoervak op het hoofdformulier en de gegevens in het subformulier, afhankelijk van de eigenschappen LinkMasterFields en LinkChildFields van het subformulierbesturingselement.
  • Baseer het formulier op een query die twee tabellen samenvoegt en gebruik vervolgens de techniek AutoLookup om een keuzelijst met invoervak te binden aan het veld dat de join bepaalt.

Deze vier methoden worden beschreven in de sectie 'Meer informatie' van dit artikel en zijn gebaseerd op de Northwind-voorbeelddatabase.

Meer informatie

Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.

Voorzichtigheid

Als u de stappen in dit voorbeeld volgt, wijzigt u de voorbeelddatabase Northwind.mdb. Mogelijk wilt u een back-up maken van het Northwind.mdb-bestand en deze stappen uitvoeren op een kopie van de database.

In de volgende tabel worden de functies (voor- en nadelen) van de vier methoden vergeleken:

Methode 1 2 3 4
Vereist geen code/macro's X
Subformulier is niet vereist X X
Kan naar andere records schuiven X X
Vereist geen query X X X X
Kan records bewerken X X X X
Hiermee opent u formulier in andere modi X

Opmerking

Deze methoden kunnen ook worden toegepast op tekstvakken.

Methode 1

  1. Maak een tabel met de naam Producten met het veld ProductID en het veld ProductName.

  2. Gebruik de wizard AutoForm: Columnar om een nieuw formulier te maken dat is gebaseerd op de tabel Producten en sla het formulier vervolgens op als frmComboTest.

    Voer de volgende stappen uit om dit te doen in Microsoft Office Access 2003 en eerdere versies van Access:

    1. Klik in het venster Database op Formulieren onder Objecten.
    2. Klik op Nieuw op de werkbalk van het venster Database.
    3. Klik in het dialoogvenster Nieuw formulier op AutoFormulier: Kolom, selecteer de tabel Producten in de vervolgkeuzelijst en klik vervolgens op OK.
    4. Sla het formulier op als frmComboTest.

    Voer de volgende stappen uit om dit te doen in Microsoft Office Access 2007 of een latere versie:

    1. Klik op het tabblad Maken op Wizard Formulier in de groep Formulieren .
    2. Selecteer in het dialoogvenster Van wizard de tabel Producten in de vervolgkeuzelijst.
    3. Selecteer de velden die u in het nieuwe formulier wilt zien en klik vervolgens op Volgende.
    4. Selecteer de optie Kolomar om de indeling van het formulier in te stellen en klik vervolgens op Volgende.
    5. Typ frmComboTest als de titel van het formulier en klik vervolgens op Voltooien.
  3. Gebruik de wizard Keuzelijst met invoervak om een niet-afhankelijke keuzelijst met invoervak toe te voegen. Ga hiervoor als volgt te werk:

    1. Open het formulier frmComboTest in de ontwerpweergave.
    2. Zorg ervoor dat wizards beheren is geselecteerd op de werkbalk.

    Opmerking

    Zorg ervoor dat in Access 2007 of een latere versie wizards beheren is geselecteerd in de groep Besturingselementen op het tabblad Ontwerpen .

    1. Maak een keuzelijst met invoervak op het formulier frmComboTest.

    Opmerking

    Klik in Access 2007 of een latere versie op Keuzelijst met invoervak in de groep Besturingselementen op het tabblad Ontwerpen en klik vervolgens op het formulier frmComboTest. Klik in het dialoogvenster Opbouwfunctie kiezen op Wizard Keuzelijst met invoervak en klik vervolgens op OK.

    1. Selecteer in het dialoogvenster Wizard Keuzelijst met invoervak de optie Een record zoeken in mijn formulier op basis van de waarde die ik in mijn keuzelijst met invoervak heb geselecteerd en klik vervolgens op Volgende.
    2. Selecteer de velden ProductID en ProductName en klik op Volgende.
    3. Klik op Voltooien.

    Met de wizard Keuzelijst met invoervak maakt u een gebeurtenisprocedure die er ongeveer als volgt uitziet:

    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. Bekijk het formulier frmComboTest in de formulierweergave.

    Wanneer u een productnaam kiest in de keuzelijst met invoervak, wordt u verplaatst naar de record voor het product dat u hebt geselecteerd.

Methode 2

  1. Maak een nieuw formulier op basis van de tabel Producten met behulp van de wizard AutoForm: Columnar volgens de instructies in stap 2 van methode 1 en sla het formulier vervolgens op als frmComboTest2.

  2. Stel op de pagina Eigenschappenvenster van het formulier frmComboTest2 de eigenschap Filter op het tabblad Gegevens in op [ProductName] = Forms![frmComboTest2]![cboLookup].

  3. Voeg een niet-afhankelijke keuzelijst met invoervak toe met de naam cboLookup en stel de eigenschappen van het besturingselement als volgt in:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. Maak de volgende macro met de naam mcrLocateProduct:

    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

    Wanneer u het formulier frmComboTest2 opent en een productnaam selecteert in de keuzelijst met invoervak cboLookup, wordt het filter ingesteld op die waarde.

Methode 3

  1. Maak een nieuw formulier op basis van de tabel Producten met behulp van de wizard AutoForm: Columnar zoals aangegeven in stap 2 van methode 1 en sla het formulier vervolgens op als frmSub.

  2. Stel op de pagina Eigenschappenvenster van het formulier frmSub de eigenschap Standaardweergave op het tabblad Opmaak in op Enkel formulier.

  3. Maak een nieuw formulier (dat niet is gebaseerd op een tabel of query) en sla dit op als frmMain. Voeg vervolgens een keuzelijst met invoervak toe en stel de eigenschappen ervan als volgt in:

    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. Voeg een besturingselement Subformulier van het formulier frmSub in.

    • Ga naarSubformulier/Subrapportontwerpen> en annuleer de wizard Subformulier.
    • Sleep de frmSub vanuit het navigatiedeelvenster naar het formulier frmMain.
  5. Stel de eigenschappen van het subformulierbesturingselement als volgt in:

    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    Door de waarde in het cboLookup-besturingselement te wijzigen, zorgt Access ervoor dat de records in het subformulier overeenkomen met de keuzelijst met invoervak.

    Het formulier Orders in de voorbeelddatabase Northwind illustreert deze methode. Het subformulier Orderdetails is gerelateerd aan de eigenschappen LinkMasterFields en LinkChildFields .

Methode 4: Gebruik de macroactie Formulieropenen met de WHERE-component

  1. Maak een nieuw formulier op basis van de tabel Producten met behulp van de wizard AutoForm: Columnar volgens de instructies in stap 2 van methode 1 en sla het formulier vervolgens op als frmComboTest5.

  2. Voeg een niet-afhankelijke keuzelijst met invoervak toe met de naam cboLookup en stel de eigenschappen van het besturingselement als volgt in:

    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. Maak in de opbouwfunctie voor macro's een nieuwe ingesloten macro in de AfterUpdate gebeurtenis voor de keuzelijst met invoervak cboLookup.

  4. Selecteer in de vervolgkeuzelijst Nieuwe actie toevoegende optie Formulier openen en stel vervolgens de volgende eigenschappen in:

    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. Sla de macro op en sluit deze.

  6. Sla het formulier op en voer het uit.

Nadat u de waarde van de keuzelijst met invoervak hebt gewijzigd, wordt het formulier gesloten en opnieuw geopend met een filter.