Pagina 1 van 1

VBA Access

Geplaatst: 05 okt 2005, 11:57
door mudelta
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?

Geplaatst: 05 okt 2005, 12:02
door NickG
Ik ben geen specialist hierin, maar

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...

Geplaatst: 05 okt 2005, 12:40
door mudelta
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.

Geplaatst: 05 okt 2005, 12:58
door Maglor
'k ben er ook geen specialist in, maar moet je niet de property "text" gebruiken ipv "value" om de inhoud ve. textfield aan te spreken?

Dus: find.text ipv find.value...

Geplaatst: 05 okt 2005, 13:50
door mudelta
Ik heb het eens geprobeerd met "text",

zonder resultaat. :?

toch bedankt voor de reactie's

Geplaatst: 05 okt 2005, 13:53
door khsw
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

Geplaatst: 05 okt 2005, 15:11
door mudelta
dat ging ook niet.

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

Geplaatst: 05 okt 2005, 15:17
door NickG
waarvoor [NAAM] staat lijkt me duidelijk!

die Chr(34) staat voor een dubbele quote: "

Geplaatst: 05 okt 2005, 15:25
door mudelta
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.

Geplaatst: 05 okt 2005, 15:30
door NickG
filter toepassen -> DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70

filter instellen -> Form_Terminologie.Filter = "[NAAM] Like " & Chr(34) & find.Value & Chr(34)