Hallo,
ik ben een simpele database aan het maken en wil daarin een zoekfunctie integreren.
Ik heb een formulier in tabelvorm, met één kolom genaamd "naam".
Stel dat ik enkel de records wil zien waarbij de "naam" "King" is, dan kan ik dit doen met het DoCmd-object en daar de methode ApplyFilter aan vasthangen op de volgende manier:
DoCmd.ApplyFilter , "naam = 'King'"
en dit functioneert.
Ik wil echter een dynamische filtering waarbij de gebruiker in een tekstveld een naam ingeeft en dat er dan gefilterd wordt op hetgeen wordt ingegeven.
mijn eerste gedacht was gewoon hetzelfde principe:
Ik heb een tekstveld (dat ik "find" heb genoemd) waarin je je zoekstring kan ingeven. En een knop "Filter".
Mijn code was dan het volgende:
Private Sub Filter_Click()
DoCmd.ApplyFilter , "naam = find"
End Sub
Wanneer men nu echter op de knop "Filter" drukt dan verschijnt er een scherm met als titel: "enter parameter value" daarin staat dan "find" en een tekstveld om een zoekstring in te geven.
Hoe kan ik ervoor zorgen dat er direct gefilterd wordt op hetgeen wat men in het tekstveld"find" ingeeft?
VBA Access
-
- Elite Poster
- Berichten: 1599
- Lid geworden op: 13 sep 2005, 10:11
- Uitgedeelde bedankjes: 46 keer
- Bedankt: 51 keer
Ik ben geen specialist hierin, maar
zal nooit werken
je zal eerder iets in de zin moeten hebben van
ofwel als je jou code gebruikt de parameter find gelijkstellen aan de waarde van het tekstveld waar je wat ingeeft. In je huidige code is de parameter find onbekend en wordt er dus gewoon extra naar gevraagd...
Code: Selecteer alles
Private Sub Filter_Click()
DoCmd.ApplyFilter , "naam = find"
End Sub
zal nooit werken
je zal eerder iets in de zin moeten hebben van
Code: Selecteer alles
Private Sub Filter_Click()
DoCmd.ApplyFilter , "naam = testveld.value"
End Sub
ofwel als je jou code gebruikt de parameter find gelijkstellen aan de waarde van het tekstveld waar je wat ingeeft. In je huidige code is de parameter find onbekend en wordt er dus gewoon extra naar gevraagd...
ik heb het volgende eens geprobeerd:
Code:
Private Sub Filter_Click()
DoCmd.ApplyFilter , "naam = find.value"
End Sub
"find" is mijn testveld, maar dan komt hetzelfde venster met in de boy ipv "find" gewoon "find.value", dus dat blijkt ook geen oplossing.
Om te controleren of de inhoud van het tekstveld wel doorgegeven wordt heb ik even de volgende regel ervoor geplaatst:
code:
Private Sub go_Click()
MsgBox (find)
DoCmd.ApplyFilter , "naam =find"
End Sub
Dan krijg ik eerst een messagebox met hetgeen ik ingetypt heb, maar blijkbaar kan ik die variabele niet gebruiken in combinatie met het DoCmd-object.
Maar ik heb onvoldoende kennis om een manier te bedenken.
Code:
Private Sub Filter_Click()
DoCmd.ApplyFilter , "naam = find.value"
End Sub
"find" is mijn testveld, maar dan komt hetzelfde venster met in de boy ipv "find" gewoon "find.value", dus dat blijkt ook geen oplossing.
Om te controleren of de inhoud van het tekstveld wel doorgegeven wordt heb ik even de volgende regel ervoor geplaatst:
code:
Private Sub go_Click()
MsgBox (find)
DoCmd.ApplyFilter , "naam =find"
End Sub
Dan krijg ik eerst een messagebox met hetgeen ik ingetypt heb, maar blijkbaar kan ik die variabele niet gebruiken in combinatie met het DoCmd-object.
Maar ik heb onvoldoende kennis om een manier te bedenken.
-
- Elite Poster
- Berichten: 1158
- Lid geworden op: 03 maa 2004, 09:04
- Uitgedeelde bedankjes: 18 keer
- Bedankt: 16 keer
Het probleem is dat je de waarde van find dient mee te geven als parameter. Nu geef je gewoon een string door.
Code: Selecteer alles
Private Sub go_Click()
MsgBox (find)
DoCmd.ApplyFilter , "naam = " & find
End Sub
dat ging ook niet.
ik heb ondertussen wat verder gezocht en ben op hetvolgende uitgekomen:
Dit lijkt te werken. Moest er iemand dit aan mij kunnen uitleggen ben ik hem erg dankbaar. (Ik ga sowieso verderzoeken om het te begrijpen).
Dank voor de reactie's
grtz
Mu
ik heb ondertussen wat verder gezocht en ben op hetvolgende uitgekomen:
Code: Selecteer alles
Form_Terminologie.Filter = "[NAAM]"
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70
Form_Terminologie.Filter = "[NAAM] Like " & Chr(34) & find.Value & Chr(34)
Dit lijkt te werken. Moest er iemand dit aan mij kunnen uitleggen ben ik hem erg dankbaar. (Ik ga sowieso verderzoeken om het te begrijpen).
Dank voor de reactie's
grtz
Mu
Bedankt, zo ben ik weer iets verder kan ik ik het nog ietske beter aanpassen naar mijn wens.
Kan je me ook vertellen wat die "DoCmd.DoMenuItem" betekent?
Ik ben gaan kijken in de VBA help maar begrijp het nog tseeds niet, maar het is blijkbaar noodzakelijk want zonder werkt het niet.
Kan je me ook vertellen wat die "DoCmd.DoMenuItem" betekent?
Ik ben gaan kijken in de VBA help maar begrijp het nog tseeds niet, maar het is blijkbaar noodzakelijk want zonder werkt het niet.