Selectievensters in Access

Selectievensters maken in MS Access database deel 4: De slotopdrachten

De laatste Selectievenster-opdrachten

Hallo eenieder. Dit is de laatste blog over selectievensters. Ik hoop dat je na mijn blogserie een stuk wijzer geworden bent. En zo niet, mag je altijd een comment achterlaten onderaan de pagina, waarop ik zo snel mogelijk reageer.

In de vorige blog liet ik je de codes in het Selectievenster zien waarmee je keuze van links naar rechts of andersom werd verplaatst.

Selectievensters in Access

Nu de keuzes zijn gemaakt, zullen we het hoofdvenster frmFietsen moeten vullen.

Lets begin!

We beginnen met vullen door op de knop btnOke te klikken.

De onderstaande code wordt dan uitgevoerd.

       Private Sub btnOke_Click()
              ‘Amsterdam, 17 juni 2017
             Dim strForm            As String
             Dim strItems           As String
             Dim strVeld              As String
             strForm = “frmFietsen”
             strItems = fncItemsRechts
             strVeld = “fts_str” & strPbForm
             With Forms(strForm)
                     .Controls(strVeld).Value = strItems
                     .Controls(strVeld).Requery
                      .prcToonlist
                      .refresh
              End with
             DoCmd.Close acForm, Me.Name
       End Sub

Omdat we het formulier ‘frmFietsen’ een aantal keren in deze procedure gaan gebruiken, zet ik de waarde “frmFietsen” in de variabele strForm. Daarna worden de rechteritems opgehaald met de bekende functie frmItemsRechts.

De variabele strVeld vullen we met de eerste zeven letters van de tabel tblFietsen en de string uit de public variabele strPbForm, die we bij het openen van het formulier frmSelectieVenster de waarde ‘Fiets’ hebben toegekend.

Ik laat de declaratie van de strPbForm nog maar even zien.

Selectievensters in Access

Deze public variabele is nog steeds gevuld. Als alle procedures in de module Form_frmSelectieVenster zijn doorlopen, verliest het pas de inhoud.

Nu vullen we zoals gezegd de variabele met de inhoud van strPbForm en laten we die waarde voorafgaan van de string ’fts_str’, waarmee strVeld de inhoud ‘fts_strFiets’ krijgt.

Tussen With en End With vullen we de opdrachten die betrekking hebben op het formulier, waarmee we voorkomen dat we steeds deze opdrachten vooraf moeten laten gaan met Forms(strForm). Bovendien belasten we ons programma iets minder.

In het frmFietsen, wat we hierna gaan bespreken, staat een control (ook wel besturingselement) met de naam fts_strFiets. Dit control heeft de eigenschap Recordsource (Besturingselementbron) en haalt de waarde uit het veld van de tblFietsen. Deze waarde plaatsten we in het veld met de functie fncItemsRechts – zie onze vorige blog. We zullen de inhoud van het veld daarna moeten verversen (.requery).

Tenslotte hebben we in het frmFietsen nog een procedure prcToonList en laten we het venster frmFietsen verversen met de opdracht .refresh. De procedure prcToonList bespreken we hierna.

Met de laatste opdracht DoCmd.Close acForm, Me.Name sluiten we het formulier frmSelectievenster en komt het hoofdformulier frmFietsen weer tevoorschijn.

De knop btnAnnuleren

Het sluiten van het formulier doen we ook met de btnAnnuleren. Het heeft de eenvoudige opdracht om het formulier te sluiten zonder dat er iets gebeurt.

Private Sub bntAnnuleren_Click()
   DoCmd.Close acForm, Me.Name
End Sub

Terug naar de code achter het hoofdvenster frmFietsen

Selectievensters in Access

Met het openen van het formulier worden er meteen twee procedures doorlopen.

Private Sub Form_Current()
Private Sub Form_Load()

 

Selectievensters in Access

Voor ons is de procedure Form_current van belang, die we krijgen als we onder de eigenschappen van het formulier in de ontwerpweergave, voor de gebeurtenis ‘Bij aanwijzen’ kiezen.

Private Sub Form_Current()
   prcToonList
End Sub

 

Elke keer als we het formulier frmFietsen kiezen wordt de procedure Form_current uitgevoerd, die vervolgens onze procedure prcToonList aanroept. Hiermee worden de gemaakte keuzes in de drie listControls lstFiets, lstStuur en lstBanden getoond door drie maal de procedure prcToonListst te doorlopen met de argumenten ‘Fiets’, ‘Stuur’ en ‘Banden’

       Sub prcToonList( _
             )
              ‘Amsterdam, 17 juni 2017
             ‘Zet het tonen van de verschillende lstControls in werking
             prcToonLists “Fiets”
             prcToonLists “Stuur”
             prcToonLists “Banden”
       End Sub

Zoals je misschien al gemerkt heb, heb ik in het formulier de keuzes aangepast en ook de velden fts_strFiets, fts_strStuur en fts_strBanden zichtbaar gemaakt. Je weet inmiddels dat de waarden overeenkomen met het ref_id in de tabel tblReferenties. Deze waarden zullen als een SQL-string in de eigenschap RowSource van de lstConstrols terecht moeten komen. We zullen de prcToonLists even volgen om te zien hoe dat gebeurt.

       Sub prcToonLists( _
             strListControl As String _
              )
              ‘Amsterdam, 17 juni 2017
             ‘Toont de gemaakte keuzes voor Fiets, Stuur en Banden
             Dim strItems     As String
             Dim strSQL            As String
             Dim rst            As Recordset
             Dim strVeld       As String
             On Error GoTo prc_err
             With Me
                            strVeld = “fts_str” & strListControl
                            If nz(Me(strVeld),””) = “” Then
                            strSQL = “”
                            Else
                            strItems = Nz(Me(strVeld).Value, “”)
                            strSQL = “SELECT ref_id
                             strSQL = strSQL & “, ref_strVerkort
                            strSQL = strSQL & ” FROM tblReferenties
                          strSQL = strSQL & ” WHERE ref_strTabel = ‘” & strListControl & “‘”
                             strSQL = strSQL & ” AND ref_ID In (” & strItems & “)”
                             strSQL = strSQL & ” ORDER BY ref_strVerkort;”
                            End If
                            Debug.print strSQL
                     Select Case strListControl
                                   Case Is = “Fiets”
                                   !lstFiets.RowSource = strSQL
                                   Case Is = “Stuur”
                                   !lstStuur.RowSource = strSQL
                                   Case Is = “Banden”
                                   !lstBanden.RowSource = strSQL
                            End Select
                            .Refresh
             End With
       prc_exit:
              Exit Sub
       prc_err:
             If Err.Number = 1 Then ‘Vul hier het nummer in voor de te ondervangen fout
                     Resume Next ‘bijvoorbeeld
      Else
                     MsgBox Err.Number & “, ” & Err.Description
                     Resume prc_exit
                     Resume
      End If

 

De procedure wordt de eerste keer aangeroepen met het argument ‘Fiets’ in de variabele strListControl. Onder het ‘With me’ zie je dat strVeld de waarde ‘fts_strFiets’ krijgt, die gelijk is aan het veld in de tabel ‘tblFietsen’.

Nu gaan we na of het veld fts_strFiets een waarde bevat. Dat kan natuurlijk NULL en dan wordt het met de nz-functie “” of al niets “” zijn. Als dat het geval is, wordt de string strSQL ook “”.

In het andere geval wordt er een SQL-string opgebouwd. Hoe die string eruit gaat zien kun je eenvoudig zien in het venster ‘Direct’. Als je nog niet eerder dit ‘programmeervenster’ het gebruikt, dan kun je die als volgt tevoorschijn halen. Kies in de opdrachtbalk van het vba-venster voor Beeld, en Venster Direct of de toetscombinatie Ctrl+G.

Door nu in de code na End if de opdracht Debug.print strSQL mee te geven, zie je in het venster Direct (hoe de string strSQL eruit ziet.

Selectievensters in Access

Uiteraard is de Debug.print code later overbodig en kun je die verwijderen of met een voorafgaande apostrof buiten werking stellen. Als programmeur zul je veel van deze opdracht gebruik maken.

Tenslotte moeten we de sqlstring nog toewijzen aan de drie listControls. Dat doen we met de SELECT-functie. Eigenlijk spreek die voor zich. Afhankelijk van de waarde van het argument strListControl (bijvoorbeeld ‘Fiets’) krijgt de eigenschap Recordsource (Besturingselentbron) van het lstControl (nu dan ‘lstFiets’) de inhoud van de strSQL toegewezen (dus ‘SELECT ref_id, ref_strVerkort FROM tblReferenties WHERE ref_strTabel = ‘Fiets’ AND ref_ID In (8, 4, 5) ORDER BY ref_strVerkort;’).

Tenslotte heb ik nog een foutondervanging toegevoegd met de namen prc_err en prc_exit. Als je die nagaat zul je de wellicht overbodige opdracht Resume na Resume prc_exit zien staan. Ik gebruik deze als de fout in de msgbox is getoond en de code in de onderbrekingsfase staat. De gele lijn kun je dan verschuiven naar Resume om dan stap-voor-stap na te gaan wat er aan de hand is.

Afsluiting

Dit was het vierde blog en daarmee zit het erop. Als je iedere oefening netjes hebt meegelopen zul je een stuk wijzer geworden zijn. Ik hoop dat ik je hiermee inzicht in de manier van Vba-programmeren in Access heb gegeven en wellicht kun je de Selectievensters in je eigen applicaties toepassen. In dat geval zou ik het super vinden als je mij hieronder kort een bericht zou willen sturen!

De eerder beloofde voorbeeld-database kun je nu ontvangen. Mail naar marketing@florijn.com om de download-link te ontvangen.

Mocht je nog steeds vragen hebben over het maken van selectievensters; laat hieronder een opmerking achter.

Neem contact op

Heb je een specifieke vraag of wens, bevindt je je in een knelpunt of wil je simpelweg even brainstormen? Contact ons vandaag nog op 020 6 254 254 of

 

Write a comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Recente blogberichten


WhatsApp Ons whatsapp