formulier zoekveld

Status
Niet open voor verdere reacties.

feint

Gebruiker
Lid geworden
3 jun 2008
Berichten
273
Hallo allemaal,

Na het lezen van een aantal post over een zoekveld in een formulier kom ik toch met de vraag of iemand mij kan helpen.

Ik heb een formulier met gegevens verschillend van persoonsgegevens tot overzicht van behaalde resultaten (ja/nee velden).

Nu wil ik in dit formulier een zoekveld waarbij ik op naam kan zoeken, als ik dan op enter duw of een zoek knop dat dan de gegevens uit de tabel worden gehaald en worden weergegeven in dit formulier.

Nu heb ik alleen geen idee waar ik moet beginnen. In sommige posts heb ik gezien dat er dlookup gebruikt wordt in vba. Echter is mijn Vba kennis niet bestaand.

Is er een mogelijkheid om dit met de interface te maken?
Of kent iemand misschien een voorbeeld waar ik naar kan kijken om het een en ander uit te proberen?

Aantal voorbeelden van records:
Naam
Adres
postcode
woonplaats
ID
contactpersoon
afdeling

Deze staan verspreid over 2 tabellen namelijk persoon en afdeling.

Een duwtje in de goede richting stel ik op prijs!:thumb:
 
Access heeft wel wizards waarmee je kunt zoeken binnen een tabel/formulier, maar niet om te filteren. Dat zul je dus zelf moeten maken. Want je hebt het wel over een zoekveld, volgens mij wil je niet zoeken, maar filteren.
dat dan de gegevens uit de tabel worden gehaald en worden weergegeven
Overigens kun je wel een zoekknop maken met de wizard, en die ombouwen, want het enige wat je hoeft te doen is (je raadt het al...) een filter op het formulier zetten. Voor een voorbeeldje van hoe je (redelijk) netjes kunt filteren, zie bijlage.
Maar, zoals je kunt zien, het is best een ingewikkeld proces, als je het goed wilt doen.
 

Bijlagen

Alvast bedankt voor je reply!

Ik heb even gespiekt in jou database.
jij hebt een formulier die de hele tabel 1 gebruikt om zijn informatie op te vragen.
vervolgens heb je een keuzelijst met invoerveld gemaakt en een knop die de filter leeggooit.

op de filter heb je het vba stukje staan van private sub txtfilter1... en op filter hetzelfde voor filter 2 (apart dan wel).

Het enige waar ik niks van begrijp bij jou stukje is wat checkfilter functie doet.
zou je dit kunnen uitleggen? Dan zal ik proberen of ik vba een beetje kan leren en zelf iets in elkaar kan zetten voor mijn db :P

hoop dat je het niet erg vind dat ik je database gebruik om te spieken.

Wat ik wil (denk dat het idd filteren is dan), is wat jij hebt. Echter heb ik geen lijst die te zien is maar 1 persoon. Maar ik denk dat dat niets uit moet maken.
 
Om 'm helemaal uit te leggen gaat een klein beetje te ver; dat doe ik straks wel in de cursus. Maar een tipje van de sluier is natuurlijk geen probleem.
De functie CheckFilter maakt het eigenlijke filter. Ik maak graag functies die universeel toepasbaar zijn, en deze is dat dus ook. In essentie gebeurt er het volgende: de tekstvakken hebben een specifieke naam gekregen,nl. txtFilter# (waarbij # dus een volgnummer is). Omdat een filter op elk willekeurig tekstvak moet kunnen worden gebruikt, moet je ergens aan het filter doorgeven welk veld je wilt filteren. Dat gebeurt in de eigenschap Tag (Extra Info) van het filterveld. Dus een extra filterveld krijgt in het voorbeeld de naam txtFilter3, en de eigenschap <Extra Info> bijvoorbeeld het veld [Bedrag].
Om het filter te laten werken, moeten alle filtervakken gecontroleerd worden. Dat gebeurt met een loop:

Code:
For Each ctl In Controls
    With ctl
        If LCase(Left(.Name, 9)) = "txtFilter" Then
            .SetFocus
            i = i + 1
            If Not sTekst((i)) = "" Then
                sFilters(i, 1) = .Tag
                sFilters(i, 2) = sTekst(i)
                sFilters(i, 3) = .Name
                x = x + 1
            End If
        End If
    End With
Next ctl
Dit is de tweede loop overigens, waarbij alle elementen worden uitgelezen. De eerste loop die je tegenkomt gebruik ik om te kijken welke tekstvakken gevuld zijn. Je hoeft namelijk niet elk tekstvak te gebruiken in het filter, dus je moet wel weten welke velden leeg zijn en welke niet. Dat doet de eerste loop: tellen hoeveel tekstvakken met tekst. Op basis daarvan wordt een matrixvariabele aangemaakt, die gevuld gaat worden met de loop die hierboven beschreven staat.
De routine loopt door alle controls heen die op het formulier staan; ook dus de keuzelijsten, labels etc. De objecten waarvan de naam met txtFilter beginnen, worden er uit geselecteerd. Deze controls worden uitgelezen, en wel de naam (.Name), de inhoud (.Text) en de veldnaam (.Tag). Als alle controls zijn bekeken, en we weten wat we gaan filteren op welk veld, wordt het filter gemaakt. Afhankelijk van de eigenschap in het frame fraOptie kies je voor AND of OR. Ook het filter wordt opgebouwd a.d.h. van de matrixvariabele: heb je 4 filtervelden gevuld, dan loopt hij 4 keer door de variabelen en voegt ze samen.

Kortom: als je de functie letterlijk overneemt, moet hij zo kunnen werken! Waar moet je op letten?
1. je filtervak moet beginnen met txtFilter, + een nummer
2. de veldnaam waarop je filtert moet je overnemen in de eigenschap <Extra Info>

Probeer 'm dus eens toe te passen, zou ik zeggen!
 
hey, super bedankt voor de uitleg!
Ik ga ermee aan de slag :D
 
Mocht je er niet uit komen, dan hoor ik 't wel :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan