VBA-ACCESS: Recordset findfirst - findlast werkt niet goed.

Status
Niet open voor verdere reacties.

fde

Gebruiker
Lid geworden
31 aug 2017
Berichten
110
Ik gebruik een keuzelijst met invoervak (id-naam-voornaam-geboortedatum) om een persoon te vinden, al zijn gegevens worden na selectie weergegeven in het zelfde formulier. Mijn code werkt perfect voor één achternaam. Zodra er meerdere personen zijn met dezelfde achternaam (andere voornaam-geboortedatum), wordt steeds het jongste record weergegeven.
Code:
Private Sub cboOpzoekenSollicitant_AfterUpdate()
Dim rsClone As DAO.Recordset
Dim strSollicitant As String
    If Not IsNull(Me.cboOpzoekenSollicitant) Then
        Set rsClone = Me.Form.RecordsetClone
            strSollicitant = Me.cboOpzoekenSollicitant.Value
            rsClone.FindFirst ("NAAM_SOLLICITANT = '" & strSollicitant & "'")
            Me.Form.Form.Bookmark = rsClone.Bookmark
   End If
End Sub

Hoe kan ik dit het beste oplossen?
Grtn - Frank
 
Ik gebruik de zoekfunctie zelden; vooral vanwege het door jou aangegeven probleem. Liever filter ik het formulier zodat ik met de knoppen Vooruit en Achteruit door de lijst kan lopen naar het volgende record. Zeker als het om een doorlopend formulier gaat; dat heb je er overigens niet bijgezet.
 
Nog iets trouwens, valt me nu pas op: je gebruikt een keuzelijst om de naam te zoeken. Maar een keuzelijst is doorgaans gebaseerd op een tabel met personen, en die personen hebben een unieke ID. Ik neem niet aan dat je alleen achternamen in die keuzelijst kan zetten, of gezet hebt, maar dus ook de overige gegevens van de personen. Zodat je, als je de eerste letters van de achternaam intypt, de lijst al gelijk beperkt tot de personen die je wilt hebben. In dat geval kun je gelijk de juiste persoon aanklikken, en zou de keuzelijst, als die goed is ingericht, het unieke ID van die persoon moeten uitlezen en niet de achternaam. Je actie (waarom niet _CLick gebruikt trouwens?) zou dan op basis van het ID gelijk naar de juiste persoon gaan.
 
Inderdaad de keuzelijst komt uit een tabel (tbl_sollicitant) via een query (qry_sollicitant_select) en bevat in volgorde de volgende waarden: naam - voornaam - geboortedatum - woonplaats - id. Het (werk) formulier "frm_sollicitant" is een enkelvoudig formulier waarop na selectie van de keuzelijst de gegevens worden geprojecteerd voor verdere behandeling. Op dit (werk) formulier staat ook de ID vermeld (ter info). Het zou best kunnen dat er een eigenschap van de keuze lijst niet goed is ingesteld, maar ik zou niet weten dewelke (heb al van alles geprobeerd), anderzijds misschien de VBA-code verder uitbreiden. Maar daar ben ik echt een leek in.
 
Laatst bewerkt:
Je hoeft niet eens zo heel veel te doen, want je hebt het veld ID al in je keuzelijst zitten. Meestal staat dat vooraan, en heeft de eerste kolom dan de breedte 0cm zodat je hem niet ziet. Zie je het ID veld wél, dan kun je niet meer op naam filteren in de lijst, vandaar dat de eerste kolom met sleutelveld altijd verborgen wordt. Achteraan zetten mag uiteraard ook. Dus als je hem laat staan, dan moet je een van deze twee dingen doen:
1. de Afhankelijke kolom niet op 1 zetten maar op 5 (hoef je bijna niks aan de code te veranderen)
2. Niet naar de Value van de keuzelijst verwijzen, maar naar de 5e kolom.

Optie 2 heb ik voor je uitgewerkt:
Code:
Private Sub cboOpzoekenSollicitant_AfterUpdate()
Dim rsClone As DAO.Recordset
    If Not IsNull(Me.cboOpzoekenSollicitant) Then
        Set rsClone = Me.Form.RecordsetClone
        rsClone.FindFirst ("ID = " & Me.cboOpzoekenSollicitant.Column(4))
        Me.Form.Form.Bookmark = rsClone.Bookmark
   End If
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan