Zoeken / Filteren via een formulier

Status
Niet open voor verdere reacties.

Theo65

Gebruiker
Lid geworden
20 mrt 2023
Berichten
55
Op dit moment heb ik een query "Zoek_Persoon_qry" waar ik handmatig filter op bepaalde criteria.
Bij voorbeel op achternaam en voornaam, waar (door verschillende schrijfwijzes) op delen van de naam, begint met, bevat, eindigt op. (bv Like "*ous*")
Waarschijnlijk een domme vraag, maar kun je filteren via een formulier (zie afbeelding)?

Hoe doe ik dat? Wie kan me op weg helpen?
 

Bijlagen

  • vb zoekformulier.jpg
    vb zoekformulier.jpg
    16 KB · Weergaven: 22
  • vb zoekfilter.png
    vb zoekfilter.png
    20,5 KB · Weergaven: 13
Laatst bewerkt:
Dat lijkt me wel. Aannemende dat je onder de knop een formulier opent, is het een kwestie van een WhereCondition op te bouwen afhankelijk van de ingevulde gegevens. Het moet uiteraard wel duidelijk zijn of er bij de verschillende regels sprake is van EN of van OF.
 
Als je een voorbeeldje post, kunnen we iets maken dat voor jouw situatie geschikt is. Anders kun je in dit voorbeeld even zoeken op "filteren op formulieren"; ik post al jaren voorbeelden met min of meer dezelfde oplossingen, dus die kun je zo ophalen hier in het forum, en dan zelf bestuderen. En als dat niet lukt, dan post ik de voorbeeld database nog wel een keer :).
 
Uit een van je voorbeelden was dit een poging, maar werkt niet. Een afbeelding van dit formulier zit bij het eerste bericht.

Bij de recordbron heb ik:
SELECT [Zoek_Persoon_qry].[Id], [Zoek_Persoon_qry].[PERSOONSNR], [Zoek_Persoon_qry].[ACHTERNAAM], [Zoek_Persoon_qry].[VOORNAMEN], [Zoek_Persoon_qry].[TUSSENVOEGSELS], [Zoek_Persoon_qry].[GEBOORTEDATUM], [Zoek_Persoon_qry].[GEBOORTEPLAATS], [Zoek_Persoon_qry].[OVERLIJDENSDATUM], [Zoek_Persoon_qry].[OVERLIJDENSPLAATS], [Zoek_Persoon_qry].[PLAATS_BEGR_CREM], [Zoek_Persoon_qry].[Partners] FROM Zoek_Persoon_qry;

In de vba van Zoek_persoon_form staat dan

Private Sub TxtAchternaam_Enter()
funFilter
End Sub
Private Sub TxtVoornamen_Enter()
funFilter
End Sub
Private Sub TxtTussenvoegsels_Enter()
funFilter
End Sub




Function funFilter()
Dim test As String
If Me.TxtAchternaam <> "" Then sFilter = "Achternaam = " & Me.TxtAchternaam
If Me.TxtVoornamen <> "" Then sFilter = sFilter & " AND VOORNAMEN = " & Me.TxtVoornamen
If Me.TxtTussenvoegsels <> "" Then sFilter = sFilter & " AND Tussenvoegsels = " & Me.TxtTussenvoegsels

MsgBox sFilter

If sFilter <> "" Then
Me.Filter = sFilter
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End Function
 
Laatst bewerkt:
Een afbeelding van dit formulier zit bij het eerste bericht.
Ik ga uiteraard geen database nabouwen op basis van een paar plaatjes :). Post een database met wat dummy data, en het gebruikte formulier en we praten verder!
 
Ik vraag ook niet om het na te bouwen op basis van de afbeelding of bericht. Het is wel een beetje afgeleid van een voorbeeld van jou wat ik op dit forum komt. Misschien dat je kunt aangeven waar ik de fout in ga?
 
Deze filter werkt voor alleen op volledige achternaam.

Function funFilter()
Dim ZoekAchternaam As String
Dim ZoekVoornaam As String
Dim ZoekTV As String


ZoekAchternaam = "'" & Me.TxtAchternaam & "'"
ZoekVoornaam = "'" & Me.TxtVoornamen & "'"
' ZoekTV = "'*" & Me.TxtTussenvoegsels & "*'" <--- met * om op deel van woord te zoeken - werkt niet


sFilter = "Achternaam = " & ZoekAchternaam
' sFilter = sFilter & " AND Voornamem = " & ZoekVoornaam <----- hier zit fout in


MsgBox sFilter


If sFilter <> "" Then
Me.Filter = sFilter
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End Function

Maar als ik de * toevoeg voor en achter, dan werkt het niet meer.
Ook als ik op 2 velden wil filteren bijvoorbeeld op voornaam dan werkt het ook niet.
Iemand advies wat ik hier fout doe?
 
Als je met wildcards wilt zoeken, moet je LIKE gebruiken in plaats van =.
 
Als er nog anderen een oplossing zoeken, het is mij met onderstaande code gelukt/ Ik vul dd velden in en met een knop zoek start ik het filter.

Function funFilter()

sFilter = "[Achternaam] like '*" & Me![TxtAchternaam] & "*'" & _
" AND [Voornamen] like '*" & Me![TxtVoornamen] & "*'" & _
" AND [Tussenvoegsels] like '*" & Me![TxtTussenvoegsels] & "*'" & _
" AND [Geboortedatum] like '*" & Me![TxtGeboortedatum] & "*'" & _
" AND [Geboorteplaats] like '*" & Me![TxtGeboorteplaats] & "*'" & _
" AND [Overlijdensdatum] like '*" & Me![TxtOverlijdensdatum] & "*'" & _
" AND [Overlijdensplaats] like '*" & Me![TxtOverlijdensplaats] & "*'" & _
" AND [PLAATS_BEGR_CREM] like '*" & Me![TxtBegraafplaats] & "*'" & _
" AND [Partners] like '*" & Me![TxtPartners] & "*'"

If sFilter <> "" Then
Me.Filter = sFilter
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End Function
 
Laatst bewerkt:
Lijkt mij een bijzonder ongelukkig filter..... En gebruik de CODE tags om code netjes op te maken. Dit ziet er niet uit :).
 
Misschien niet fraai, maar het werkt. Beter kan ik het niet. Misschien kun je dan aangeven hoe het wel had moeten zijn, dan kan ik daar van leren.
 
Om te beginnen een paar fouten:
1. Datums zijn getallen, en die mag je dus niet als tekst filteren. Daarbij is het onzinnig om op 1 of 2 cijfers te filteren, om maar eens wat te noemen. Het getal 11 kan zowel in een jaar zitten, een maand of een dag zijn.
2. Filteren met de enkele quoot heb je zéker niet van mij, want dat is vrágen om fouten in je filter. Enkele quoots komen namelijk óók voor in plaatsnamen ('s Gravenhage) en achternamen (van 't Hek) en jouw filter kan dat niet verwerken.
3. Het is onzinnig om op alle velden te filteren. Normaal gesproken filter je alleen op de gebruikte velden. Zoals in de eerste code die je hebt gepost.

4. In je eerste plaatje heb je een keuzelijst waarmee je aangeeft hoe je wilt zoeken. Die optie zie ik nu niet meer terug. Niet echt een fout, maar wel een (onnodige) verandering van aanpak.
 
Bedankt voor je terug koppeling OctaFish. Nuttig voor mij, maar weet niet of dit allemaal fouten zijn dan wel een andere interpretatie.

1. Datums zijn getallen, en die mag je dus niet als tekst filteren.
Ik gebruik een tabel van een derde (een stichting) die de gegevens bijhoud. Omdat het ook veel data zijn van voor 1900 is er daar voor gekozen om tekst velden te gebruiken.
En ik kan nog steeds filteren op een jaartal

2. Filteren met de enkele quoot heb je zéker niet van mij,
Nee dit heb ik niet van jou, zal het wel via google zijn tegengekomen, maar met dubbele quotes werkte het ook niet. De plaatsnaam 's Gravenhage werd wel gevonden. Maar inderdaad de achternaam "Huis in 't Veld" werd niet gevonden.
Maar als met dubbele quotes werkt ook niet, hoe dan wel?

3. Het is onzinnig om op alle velden te filteren
Alle velden is misschien onzinnig, maar op meerdere velden is wel handig, zoals voornaam achternaam of achternaam en achternaam partner of achternaam en geboorteplaats. Je kunt de zoekvelden leeglaten

4. In je eerste plaatje heb je een keuzelijst

Is inderdaad wel handig om keuzelijsten te gebruiken voor "begint met", "bevat" of "eindigt op", , maar de focus lag eerst om "bevat deel tekst" goed werkend te krijgen.
Maar ben nog niet bekend met het gebruik van keuzelijsten in VBA dus heb dat even laten liggen om het voor mijzelf niet moeilijker te maken, maar wel de zoekfunctie al kan gebruiken.
Ik gebruik inmiddels de database al (en gestopt met grote database in Excel), dus dit was meer een praktische overweging van een beginnend gebruiker.
 
het ook veel data zijn van voor 1900 is er daar voor gekozen om tekst velden te gebruiken.[/QUOTE]
Geen goed argument; Access heeft totaal geen probleem met oudere datums. Al ga je terug tot de tijd van Karel de Grote .


Maar als met dubbele quotes werkt ook niet, hoe dan wel?
Uiteraard wél met dubbele quoots, maar op de juiste manier . Het principe is heel simpel: de dubbele quoot wordt in Access gebruikt om een string te starten. Dus je kunt niet volstaan met één dubbele quoot: Access moet weten dat de dubbele quoot gebruikt wordt om de string aan te duiden. Dus i.p.v. dit
Code:
& " AND [Geboorteplaats] like '*" & Me![TxtGeboorteplaats] & "*'"
Krijg je dit:
Code:
& " AND [Geboorteplaats] Like ""*" & Me.TxtGeboorteplaats & "*"""
Je vervangt dus op elke plaats waar een enkele quoot staat deze door twee dubbele quoots. En dan werkt je code echt wel perfect.


@3: Ik vind dat lui programmeren .


En als je niet meer met Excel werkt: zet je datumvelden dan gewoon om naar datum. Ben je beter mee uit.
 
Dan herhaal ik het nog een keer: doe er een voorbeeldje bij. Ik kan (en wees daar heel blij om) niet in jouw hoofd kijken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan