Access formulieren

http://www.pcmenu.nl - Hans Bronkhorst

Zie ook elders op deze site:

PCMenu

Access Tips en trucs

Programmavoorbeelden Access

Formulierontwerp

Formulieren uit AdresMenu

Access rapporten

Access tabellen

Access query's

Access macro's, modules en VBA programmacode

Hebt u inhoudelijke vragen over Access die u niet in deze teksten beantwoord ziet, stel deze dan bij een van de volgende forums: http://office.webforums.nl/forum/, http://www.helpmij.nl/forum of http://forums.breekpunt.nl/. U krijgt meestal dezelfde dag nog een helder antwoord van een van de deelnemers.

 In deze tekst:

Formulieren en rapporten

Begrippen

Besturingselementen op formulieren en rapporten

Formulierontwerp

Draaitabel en draaigrafiek formulieren

Requery

Acties

DLookUp()

Formulier verversen

Formulier of rapport openen

Verwijzingen naar en van formulieren en besturingselementen

Wijzigingen en toevoegingen (niet) toestaan

Recordset type aanpassen

Opbouwfunctie in Access: corrigeren

Gebruik van ; of , als scheidingsteken in expressies en in programmacode

Uitroepteken of punt gebruiken

Formulieren en rapporten

In Access komen de Eigenschappen van formulieren en rapporten voor een deel overeen. Waar dit handig is, beschrijft deze tekst de eigenschappen van zowel formulieren als rapporten. Zie Access rapporten voor meer informatie over rapporten en rapporttypen.

Begrippen

In deze tekst worden de volgende begrippen besproken:

*   Formulieren zijn bedoeld om gegevens in te voeren, maar ook om grafieken te tonen of om een menu te maken. Op het formulier plaatst u een aantal besturingselementen. In Access kunt u kiezen uit onder andere de besturingselementen tekstvakken, labelvakken, keuzelijsten, aankruisvakjes. U kunt per besturingselement vele eigenschappen vastleggen en voor het formulier de tabvolgorde van de besturingselementen bepalen.

*   Rapporten zijn afdrukvoorbeelden van diverse overzichten en tabellen. De gegevens voor het rapport haalt u uit tabellen of query's.

Besturingselementen op formulieren en rapporten

Formulieren en rapporten in Access zijn opgebouwd uit besturingselementen, die elk een eigen toepassing hebben. De belangrijkste ziet u hier:

*   In een Label-vak plaatst de programmeur vaste tekst, u kunt niets invoeren. 
Een label-vak kan wel als een knop zijn ingesteld: door te klikken op de tekst activeert u een bepaalde actie, bijvoorbeeld het openen van een formulier. U kunt de tekst van een labelvak desgewenst ook verticaal plaatsen (tekst loopt van onder naar boven).

*   In een Tekst-vak (voorbeeld: Naam) kunt u tekst en/of getallen invoeren. Een tekstvak is meestal gekoppeld aan een veld in de onderliggende tabel of query van het formulier.

*   In een Keuzelijst met invoervak (voorbeeld: Code) kunt u een keuze uit een lijst kiezen óf een vrije tekst invoeren. (U kunt ook instellen dat de gebruiker alleen uit de lijst mag kiezen.) De tekst die u typt is zelf-aanvullend: na elke letter die u typt vult Access het veld aan met de passende keuze uit de keuzelijst. 

*   In een Keuzelijst (voorbeelden: Keuzelijst1 en Keuzelijst2) kunt u alleen kiezen uit een aantal mogelijkheden. Een keuzelijst kan meer regels tonen, zoals in Keuzelijst1, of slechts één regel, zoals in Keuzelijst2: Wijk. Typ een of meer keren de eerste letter of het eerste cijfer van de keuze om de keuze te maken. In een Keuzelijst moet u altijd een keuze maken. Alleen als de tekst in wit op zwart getoond wordt hebt u een keuze gemaakt. De programmeur kan instellen dat u in een keuzelijst meer dan een items mag kiezen.

*   Een Knop-vak is een vak waarop u kunt klikken om een actie uit te voeren. U kunt in een formulier knop-vakken tegenkomen met een afbeelding (bijvoorbeeld een afbeelding van een deur of van een printer) of met een tekst.

*   In een Keuzevak met keuzerondjes kunt u slechts één van de keuzerondjes aanklikken.Zodra u een van de rondjes aanklikt, zet Access de andere rondjes direct 'uit'.

*   In een Aankruisvakje (voorbeeld: Deelnemer) kunt u per vakje iets aan- of uit zetten. U kunt om tussen deze twee standen te wisselen de linker muisknop of de spatiebalk gebruiken.

In de balk onder dit formulier ziet u de Record-kiezer, waarmee u naar een ander record kunt gaan. 
De teller geeft alleen het aantal te tonen records aan, bij formulieren waarbij u alleen nieuwe records kan maken, begint de teller van de recordkiezer op 0, u ziet dus niet hoeveel records er al in de tabel staan.  Met de F5-toets springt u snel naar de teller.

Formulierontwerp

Veel tips en voorbeelden voor uw formulierontwerp leest u in de tekst  Formulierontwerp.

Draaitabel en draaigrafiek formulieren

Bij Access XP en hogere versies kunt u gebruik maken van Draaitabel- en Draaigrafiek formulieren. Deze worden ook in Excel gebruikt. Een Draaitabel is een tabel waarin gegevens handig gegroepeerd en getotaliseerd zijn op door uzelf in te stellen niveau's. Een draaigrafiek is een grafische weergave van een draaitabel. De weergave van zowel een draaitabel als een draaigrafiek kan door de gebruiker aangepast worden, bijvoorbeeld door het maken van een andere selectie van de gegevens, een andere groepering of wijzigen van een lijngrafiek in een staafgrafiek. De gebruiker kan deze aanpassingen in de weergegeven tabel of grafiek doen, hij of zij hoeft hiervoor niet het formulierontwerp aan te passen. De draaigrafiek past zich ook automatisch aan aan de grootte van het weergavevenster.

Voorbeeld: u bent manager van een meldkamer en houdt een tabel bij voor het aantal meldingen per kwartier van de dag. In deze tabel of query staan de velden Jaar, Maand, Dag, Tijd, Soort_melding, Aantal_meldingen. In een draaitabel kunt u het aantal Meldingen groeperen en totaliseren per Jaar (pagina) en dan per Maand en per Soort_melding, maar u kunt ook een draaitabel maken die bijvoorbeeld het aantal meldingen per Uur van de dag per Soort_melding laat zien. In een Draaigrafiek kunt u dit grafisch weergeven: op de horizontal as toont u het kwartier van de dag, op de verticale as het gemiddeld aantal meldingen per dag en elke lijn in het grafiekwerkblad geeft het aantal meldingen van een maand aan.

Klik op de afbeelding om deze te vergroten

Requery

Wanneer u de waardes van een Keuzelijst of Keuzelijst met invoervak gewijzigd hebt, dan zult u vaak de Keuzelijst weer bij moeten werken, voordat u deze nieuwe waardes ziet. U kunt dit doen door bij de gebeurtenisprocedure Bij focus op te nemen dat u het veld opnieuw moet berekenen (requery): 

 

Private Sub cboKeuzelijst_GotFocus():

    cboKeuzelijst.Requery

End Sub

 

U kunt er ook functie in een algemene module van maken, en deze iedere keer oproepen als u de focus op het Keuzelijstje met invoervak hebt. Dat scheelt u per keuzelijstje heel wat klik- en typwerk. Ga naar het tabblad Module, maak een nieuwe module en schijf hier de volgende regels in:

        Function fReq()
            CodeContextObject.ActiveControl.Requery
        End Function

U roept deze functie op door bij de Gebeurtenis Bij focus van de keuzelijst met invoervak te schrijven:
        =fReq()

Acties

U kunt knoppen op uw formulier maken en achter elke knop een van de onderstaande drie acties plaatsen:

Het starten van een Macro: zet bij de Gebeurtenis Bij klikken de naam van de macro.

Het starten van een stukje programmacode: kies bij de Gebeurtenis Bij klikken voor een Gebeurtenisprocedure en maak de gebeurtenisprocedure aan.

Het oproepen van een functie: zet bij de Gebeurtenis Bij klikken een =-teken gevolgd door de naam van de functie met de ( ) er bij: =fNaarEerste()

U kunt geen subroutines starten, wel kunt u het starten van een subroutine opnemen in de programmacode van de knop:

Private Sub cmdKnop1_Click()
 Call Mijn_subroutine
End Sub

DLookUp()

Wanneer u een waarde uit een tabel wilt halen en deze tabel is niet de bron van het formulier, dan kunt u dit op twee manieren doen:

Wijzig de bron van het formulier in een query, waarin de andere tabel en de betreffende velden uit die tabel wel zijn opgenomen, of:

Gebruik functies als =DLookUp() om de waarde uit de andere tabel te halen. DLookUp() heeft de volgende opbouw:
DLookup("[veldnaam]", "[tabel- of querynaam]", "[voorwaarde voor de selectie]")
U kunt de voorwaarde desgewenst weglaten. Access geeft bij DLookUp() en vergelijkbare functies altijd maar één waarde terug, dit is de eerste-de-beste waarde die voldoet aan de kenmerken in de functie.

Voorbeeld: Bereken de waarde van het veld txtAchternaam in de programmacode van het formulier, txtID_Naam is de naam van het veld ID_Naam op het huidige formulier.

Aandachtspunten bij DLookup() en vergelijkbare functies

1. In programmacode gebruikt u in alle functies een , als scheidingsteken:

    txtAchternaam =  DLookup("[Achternaam]", "[tblNaam]", "[ID_Naam] = " & [txtID_Naam])

U kunt de functie ook bij de eigenschap Gegevensbron van een veld op een formulier opnemen. In de formulier- en rapporteigenschappen en in query's gebruikt u een ; als scheidingsteken:

    =DLookup("[Achternaam]"; "[tblNaam]"; "[ID_Naam] = " & [txtID_Naam])

2. Het is sterk aan te raden om de naam van het veld op het formulier niet gelijk te maken aan de naam van de bron van het veld.

Voorbeeld: als u op een formulier een veld hebt dat als bron het veld ID_Naam heeft, geeft u dit veld de naam txtID_Naam. In functies zoals DLookUp() die verwijzen naar dit formulierveld is het dan duidelijk dat u naar het veld verwijst wat op dat moment op het actieve formulier getoond wordt en niet naar de waarden van het veld van de onderliggende tabel of query van dat formulier. Dit is met name van belang omdat u vaak zult verwijzen naar een veld op een formulier dat nog niet opgeslagen is. Het onderliggende veld in de tabel of query is dan nog niet bijgewerkt en is dus anders dan het zichtbare veld op het formulier.

3. Let op bij het opstellen van de voorwaarde: als u een vergelijking maakt tussen twee tekstwaarden, dan zet u de te vergelijken waarde tussen enkele aanhalingstekens, bij een vergelijking tussen twee numerieke waarden plaatst u geen enkele aanhalingstekens:

Vergelijking van twee numerieke waarden:  
 DLookup("[Achternaam]"; "[tblNaam]"; "[ID_Naam] = " & [txtID_Naam])

Vergelijking van twee teksten:   
DLookup("[Voornaam]"; "[tblNaam]"; "[Achternaam] = '" & [txtAchternaam] & "'")
(begin: enkel aanhalingsteken direct gevolgd door een dubbel aanhalingsteken, einde: dubbel aanhalingsteken direct gevolgd door een enkel aanhalingsteken, gevolgd door een dubbel aanhalingsteken, zet geen spaties tussen de aanhalingstekens).

4. Als u geen spaties of - of andere leestekens (behalve _ ) gebruikt in de veldnamen of tabel- of querynamen, dan kunt u de [ ] weglaten:

        =DLookup("Achternaam"; "tblNaam"; "ID_Naam = " & txtID_Naam)

Vergelijkbare functies

Naast DLookUp() heeft Access ook de volgende, vergelijkbare functies:

DCount() (tel het aantal waardes)

DMin(), DMax() (laagste / hoogste waarde)

DFirst(), DLast() (eerste / laatste waarde in een gerangschikte lijst)

DAvg() (gemiddelde), DStDev() (standaarddeviatie)

DSum() (optelling).

Zie de Help van Access voor de uitleg van deze functies of de webpagina http://www.mvps.org/access/general/gen0018.htm

Formulier verversen

Als u op een formulier gegevens hebt ingevuld of gewijzigd en u op basis van dit formulier bijvoorbeeld een rapport wilt afdrukken, dan moet u het formulier eerst verversen, zodat de gegevens verwerkt zijn. U kunt dat als volgt doen: neem in de programmacode van de knop die het rapport oproept, de regel Me.Dirty = False op. Met deze opdracht slaat u de gegevens van het formulier op, voordat u het rapport oproept.

Voorbeeld: u hebt op uw formulier een knop met de naam cmdRapport_factuur die het rapport rptRapport_factuur oproept. De programmacode van deze knop wordt dan:

    Sub cmdRapport_factuur_OnClick()
        Me.Dirty = False
        DoCmd.OpenReport "rptRapport_factuur"
    End Sub

Formulier of rapport openen

U kunt vanaf elk formulier een ander formulier of een rapport openen met de volgende code:

    DoCmd.OpenForm "frmnaam", weergave, filter, Where-voorwaarde

    DoCmd.OpenReport "rptnaam", weergave, filter, Where-voorwaarde

Weergave: Als weergave kunt u kiezen voor een formulierweergave, een weergave als gegevensblad (vergelijkbaar met een tabel) of een weergave in de ontwerp-modus. In het formulier zelf kunt u bepalen of het formulier als een enkelvoudig formulier of als een doorlopend formulier (alle records onder elkaar) moet worden weergegeven.

Filter of Where-voorwaarde: Wilt u alle records in het formulier of het rapport weergeven, laat dan het filter en de Where-voorwaarde weg. Wilt u slechts enkele records weergeven, geef dan óf een filter, óf een Where-voorwaarde aan. 

Als filter kunt u een query opgeven die een selectie is van de volledige query van het formulier.

Als Where-voorwaarde geeft u bijvoorbeeld aan, aan welke voorwaarde een bepaald veld van de tabel of query achter het te openen formulier moet voldoen:

"ID = " & Me!txtID   ' bij numerieke vergelijking
"Naam = '" & Me!txtNaam & "'"   ' bij vergelijking tussen teksten (strings)

Me.txtID en Me!txtNaam verwijzen naar het veld txtID en txtNaam op het huidige (Me) formulier. 

Let ook hier weer op bij het opstellen van de voorwaarde: als u een vergelijking maakt tussen twee tekstwaarden, dan zet u de te vergelijken waarde tussen enkele aanhalingstekens, bij een numerieke vergelijking plaatst u geen enkele aanhalingstekens. Plaats tussen de eerste " en de ' en tussen de laatste ' en de " geen spatie: die spatie wordt dan namelijk meegenomen met de vergelijking.

Voorbeelden:

Wilt u op een formulier met een knop cmdRapport_Factuur het hele rapport rptRapport_Factuur tonen, dan zet u de volgende code bij de Gebeurtenis Bij klikken van de knop cmdRapport_Factuur:

    Sub cmdRapport_factuur_OnClick()
        Me.Dirty = False
        DoCmd.OpenReport "rptRapport_factuur"
    End Sub

Wilt u alleen het rapport van één record tonen, dan neemt u een voorwaarde op in de opdrachtregel. In onderstaand voorbeeld wordt alleen het rapport van het record getoond met het ID_Factuur nummer dat gelijk is aan die van het veld txtID_Factuur op het huidige formulier:

    Sub cmdRapport_factuur_OnClick()
        Me.Dirty = False
        DoCmd.OpenReport "rptRapport_factuur", , , "ID_Factuur = " & txtID_Factuur
    End Sub

Bij een niet-numeriek veld moet u dit tussen ' ' zetten:

    Sub cmdRapport_factuur_OnClick()
        Me.Dirty = False
        DoCmd.OpenReport "rptRapport_factuur", , , "Achternaam = '" & txtIAchternaam & "'"
    End Sub

Wilt u het openen van een rapport in een functie zetten, die u overal kunt oproepen, dan kunt u in de functie met CodeContaxtObject (zie verderop in deze tekst) verwijzen naar het formulier waar de knop staat om het rapport te openen:

    Function fReport(strNaam As String, Optional strCriteria As String)
    'code om een rapport te openen, eventueel met een Filter óf met Where-voorwaarden
        On Error GoTo Err_fReport

        'eerst het formulier verversen
        CodeContextObject.Dirty = False

        'dan rapport tonen, eventueel met gefilterde records
        'zet een extra , tussen acViewPreview en strCriteria, omdat u geen Filter gebruikt
        DoCmd.OpenReport strNaam, acViewPreview, , strCriteria

        Exit_fReport:
        Exit Function

        Err_fReport:
        Resume Exit_fReport

    End Function

Op het formulier zelf zet u bij de desbetreffende knop bij de gebeurtenis Bij klikken de volgende regel:

    =fReport("rptRapport_Factuur"; "ID_Factuur = " & txtID_Factuur)

Als u het hele rapport wilt tonen, zonder filter, dan laat u de optionele voorwaarde weg:

    =fReport("rptRapport_Factuur") 

Het voordeel van deze werkwijze is dat u geen Gebeurtenisprocedure voor elke Gebeurtenis hoeft te maken, u zet deze opdrachtregel direct achter de Gebeurtenis Bij klikken. Hierdoor is deze opdrachtregel onafhankelijk van de naam van de knop. U kunt de knop kopiëren naar een andere formulier of een andere naam geven, zonder dat u de opdrachtregel hoeft aan te passen. In de programma's die op vanaf deze site kunt downloaden is dit veelvuldig toegepast.

Verwijzingen naar en van formulieren en besturingselementen

U kunt in de programmacode op verschillende manieren verwijzen naar een formulier of rapport.

Formulier of rapport aanwijzen

U kunt verwijzen naar het formulier of rapport waar de programmacode in staat met Me. Voorbeeld: Me.txtFormulierveld.Visible = False maakt  het tekstveld  txtFormulierveld op het huidige formulier onzichtbaar.

Als u vanuit een formulier een ander formulier opent, kunt u verwijzen naar het actieve formulier met Screen.ActiveForm.
Voorbeeld: Screen.ActiveForm.txtFormulierveld.SetFocus zet de focus op het tekstveld  txtFormulierveld op het laatst geopende en dus actieve formulier. Deze code kan zelf op een ander formulier of in een module staan.

U kunt ook het formulier of rapport aanwijzen met Forms!formuliernaam of Reports!rapportnaam. Het formulier of rapport moet dan wel eerst geopend zijn!
Voorbeeld: Forms!frmMijnFormulier!txtFormulierveld = "nieuwe waarde" wijzigt de waarde van het tekstveld  txtFormulierveld op het formulier frmMijnFormulier in "nieuwe waarde".

Weet u nog niet de formulier- of rapportnaam omdat deze in een variabele bepaald wordt, zet dan de variabelenaam tussen ronde haakjes:

    Dim strFormnaam As String, strAchternaam As String
    strFormnaam = "frmMijnformulier"
    strAchternaam = Forms(strFormnaam)!txtAchternaam

U kunt een verwijzing naar een nog onbepaald formulier ook in een functie gebruiken:

    Function fAchternaam(strFormnaam As String) As String
        fAchternaam = Forms(strFormnaam)!txtAchternaam
    End Function

Als u nu de waarde van het tekstveld txtAchternaam op het (geopende!) formulier frmMijnFormulier wilt weten, geeft u de volgende opdracht:
    Dim strAchternaam As String
    strAchternaam = fAchternaam("frmMijnFormulier")

Verwijzen vanuit een module

U kunt in een module een algemene (Public) functie maken en met CodeContextObject verwijzen naar het object (formulier, rapport enz.) waar deze functie van toepassing is.
Voorbeeld: strFormuliernaam = CodeContextObject.Name

Verwijzen naar een besturingselement

U kunt naar het actieve veld of de gekozen knop verwijzen met ActiveControl.
Voorbeeld: strActuele_veld = CodeContextObject.ActiveControl.Value

Binnen een formulier kunt u met Screen.PreviousControl.SetFocus de focus op het laatst gekozen Besturingselement zetten. U gebruikt dit bijvoorbeeld als u bij een klik op een knop terug wilt gaan naar het laatste gekozen tekstveld, keuzelijstje of ander element.

Verwijzen naar een Hoofd- of een Subformulier of -rapport

Wilt u vanaf het hoofdformulier of hoofdrapport naar een veld op een  subformulier of subrapport verwijzen, gebruik dan de objectverwijzing Form. of Report. (enkelvoud!), voorafgegaan door de naam van het subformulier of subrapport. Voorbeeld: Me.txtHoofdfrmveld = Me.sfrmSubfrm.Form.txtSubfrmveld wijzigt de waarde van het veld txtHoofdfrmveld van het huidige (Me) hoofdformulier in de waarde van het tekstveld  txtSubfrmveld op het subformulier sfrmSubfrm.

U kunt ook naar het actieve subformulier verwijzen, zonder dat u de naam van het subformulier weet. Het subformulier is een besturingselement op het actieve formulier. U verwijst dus eerst naar het actieve formulier (Screen.ActiveForm) en dan naar het actieve besturingselement (ActiveControl) op dat formulier. Voorbeeld: de naam van het actieve subformulier achterhaalt u met de verwijzing Screen.ActiveForm.ActiveControl.Form.Name

Wilt u vanaf een subformulier of subrapport naar een veld op het hoofdformulier of hoofdrapport verwijzen, dan kunt u gebruik maken van de relatieve objectverwijzing Parent. 
Voorbeeld: Me.txtSubfrmveld = Parent.txtHoofdfrmveld wijzigt de waarde van het tekstveld  txtSubfrmveld op het huidige (Me) subformulier in de waarde van het veld txtHoofdfrmveld van het hoofdformulier.
U kunt ook met een absolute verwijzing naar het hoofdformulier verwijzen: Me.txtSubfrmveld = Forms!frmHoofdfrm!txtHoofdfrmveld

Wijzigingen en toevoegingen (niet) toestaan

U kunt met programmacode instellen of u records in het formulier mag wijzigen. Enkele voorbeelden:

    Me.AllowAdditions = True ' toevoegen van records toestaan
    Me.AllowEdits = True ' wijzigingen toestaan
    Me.AllowDeletions = True ' verwijderen van records toestaan
    Me.DataEntry = False ' u opent het formulier met een bestaand record. Als u Me.DataEntry op True zet dan kunt u alleen records toevoegen en geen bestaande records bekijken of wijzigen.

Bij Me.DataEntry = True zet u meestal Me.AllowAdditions ook op True, zodat u de nieuw ingevoerde records nog wel kunt wijzigen. Als u Me.AllowEdits op False hebt staan, dan kunt u alleen nieuwe records invoeren en deze niet meer wijzigen, zodra u het record verlaten hebt.

U kunt op vergelijkbare wijze tekstvelden, groepsvakken ed. vergrendelen of beschikbaar maken:

    Me.txtVeldnaam.Locked = True ' veld is vergrendeld
    Me.txtVeldnaam.Enabled = True ' veld is wel ingeschakeld
    Me.txtVeldnaam.Visible = True ' veld is wel zichtbaar

Wilt u de wijzigingsinstellingen voor een subformulier instellen, verwijs dan eerst naar het subformulier met naamsubformulier.Form:

    Me.sfrmFormulier.Form.AllowEdits = False  ' u kunt niets wijzigen in het subformulier sfrmFormulier

Recordset-type aanpassen

Een mooie manier om het mogelijk te maken dat een gebruiker records in het formulier wel of niet mag wijzigen, is door het type recordset aan te passen waarop het formulier gebaseerd is. De recordset is de verzameling van records (gegevens) die samen de bron van het formulier vormen. Er zijn binnen Access enkele soorten recordsets:

Een Momentopname (Snapshot) is een eenmalige momentopname van de records. U kunt de records alleen bekijken en niet wijzigen, toevoegen of verwijderen.

Een Dynaset is een dynamische opname van de records. U kunt records wijzigen, toevoegen en verwijderen: alle wijzigingen worden direct in de tabel of query doorgevoerd.

Een formulier is standaard gebaseerd op een dynamische recordset, zie de Eigenschappen van het formulier >> tabblad Gegevens >> Type recordset.

Als u niet wilt dat de gebruiker iets kan wijzigen in de records, zet dan het Type recordset op Momentopname. U kunt wel keuzelijstjes gebruiken op het formulier om records te zoeken, de zoek-keuzelijstjes veranderen immers niets aan de onderliggende records.

U kunt ook met programmacode wisselen tussen een Dynamische recordset (waarde = 0) of een Momentopname (waarde = 2). Voorbeeld uit de Help van Access: om het formulier bij het openen op Alleen lezen te zetten als de gebruiker geen Beheerder is: plaats de volgende code bij de Gebeurtenis Bij openen:

Sub Formulier_Openen(Cancel As Integer)
    Const conSnapshot = 2
    If gstrGebruikersID <> "BEHEERDER" Then
        Forms!Medewerkers.RecordsetType = conSnapshot
    End If
End Sub

conSnapshot is een zelf gekozen naam van een constante (een variabele met een vaste waarde), dat in dit voorbeeld de waarde 2 krijgt. U kunt ook het cijfer 2 invullen op de plaats van conSnapshot, maar door deze constante te gebruiken wordt uw programmacode beter leesbaar.

In programma's zoals Inlogmenu (zie elders op deze site) wordt gebruik gemaakt van de functie fInBevoegd() om te kijken of de gebruiker bepaalde rechten heeft. Bij een Beheerder geeft de functie fInBevoegd("B") de waarde Yes / -1 terug als de gebruiker een Beheerder is, anders geeft de functie de waarde No / 0 terug. U gebruikt deze functie als volgt in een formulier om alleen de Beheerders toe te staan het formulier te wijzigen. Zet het Type recordset van het formulier standaard op Dynaset en zet bij de Gebeurtenis Bij openen de volgende programmacode:

Sub Formulier_Openen(Cancel As Integer)
    Const conSnapshot = 2
    If fInBevoegd("B") = 0 Then
        ' B = in InlogMenu: de letter voor een Beheerder in de bevoegdhedenfunctie
        Forms!Medewerkers.RecordsetType = conSnapshot
    End If
End Sub

Als u op een formulier een subformulier hebt staan, dan worden de records in dit subformulier niet vergrendeld. U kunt het subformulier met bijvoorbeeld .Locked vergrendelen (zie hiervoor) of de recordset van het subformulier ook op het type Momentopname zetten.

Opbouwfunctie in Access: corrigeren

Als uw programmma in een oudere Nederlandstalige versie van Access (2.0 of 97) gemaakt is en u in die versie de Opbouw-functie gebruikt hebt, dan heeft Access de Nederlandse namen Formulieren!... , Formulier!, en Rapport!... opgenomen in de programmacode of expressie. Vertaal deze termen altijd in het Engelstalige Forms, Form, Reports en Report, omdat de Nederlandse termen in andere taalversies van Access niet herkend worden.
Queries moet u stuk voor stuk nalopen, in programmacode kunt u met Zoeken en vervangen in het hele programma de termen Formulieren, Formulier, Rapporten en Rapport vervangen door Forms, Form, Report en Reports.
In de latere versies van Access worden wel de Engelse termen gebruikt, ook in de Nederlandstalige versies.

Gebruik van ; of , als scheidingsteken in expressies en in programmacode

In de Nederlandstalige versie van Access gebruikt u in formulieren, rapporten en queries in functies zoals DLookup() de ; om gegevens te scheiden, maar in programmacode (en in de Engelstalige versie van Access ook in formulieren enz.) gebruikt u de , om gegevens te scheiden. Voorbeeld:

Formulieren, query's: In de Eigenschappen van het besturingselement txtAchternaam van het formulier frmNaam berekent u de waarde van het veld txtAchternaam met de volgende functie:

            =DLookup("[Achternaam]"; "[tblNaam]"; "[ID_Naam] = " & [txtID_Naam])

Programmacode: In de programmacode van het formulier of in een Module berekent u deze waarde met de volgende functie:
            txtAchternaam =  DLookup("[Achternaam]", "[tblNaam]", "[ID_Naam] = " & [txtID_Naam])

 

Uitroepteken of punt gebruiken

U gebruikt een . tussen twee gereserveerde woorden van Access en als het tweede woord een eigenschap of actie is op het eerste woord.  U gebruikt een ! als scheidingsteken tussen een gereserveerd woord van Access en een naam die u zelf heeft gegeven, dus van een variabele. Voorbeeld: Screen.ActiveForm![txtMijnVeld].SetFocus
Access zal overigens geen foutmeldingen geven als u de . en het ! door elkaar gebruikt.

Lees verder

U kunt meer over formulieren in Access lezen bij Formulieren uit AdresMenu, Andere formulieren uit AdresMenu en bij Ontwerpen van formulieren en menu's.

Lees verder bij Access rapporten.