VBA Access

Plaats reactie
mudelta
Starter
Starter
Berichten: 5
Lid geworden op: 05 okt 2005, 11:07
Locatie: vilvoorde

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?
NickG
Elite Poster
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

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...
mudelta
Starter
Starter
Berichten: 5
Lid geworden op: 05 okt 2005, 11:07
Locatie: vilvoorde

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.
Maglor
Elite Poster
Elite Poster
Berichten: 2048
Lid geworden op: 06 dec 2004, 16:26
Uitgedeelde bedankjes: 139 keer
Bedankt: 56 keer

'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...
mudelta
Starter
Starter
Berichten: 5
Lid geworden op: 05 okt 2005, 11:07
Locatie: vilvoorde

Ik heb het eens geprobeerd met "text",

zonder resultaat. :?

toch bedankt voor de reactie's
khsw
Elite Poster
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
mudelta
Starter
Starter
Berichten: 5
Lid geworden op: 05 okt 2005, 11:07
Locatie: vilvoorde

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
NickG
Elite Poster
Elite Poster
Berichten: 1599
Lid geworden op: 13 sep 2005, 10:11
Uitgedeelde bedankjes: 46 keer
Bedankt: 51 keer

waarvoor [NAAM] staat lijkt me duidelijk!

die Chr(34) staat voor een dubbele quote: "
mudelta
Starter
Starter
Berichten: 5
Lid geworden op: 05 okt 2005, 11:07
Locatie: vilvoorde

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.
NickG
Elite Poster
Elite Poster
Berichten: 1599
Lid geworden op: 13 sep 2005, 10:11
Uitgedeelde bedankjes: 46 keer
Bedankt: 51 keer

filter toepassen -> DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70

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

Terug naar “Development”