Gegevens oproepen met DoCmd Apply Filter

Status
Niet open voor verdere reacties.

joppi3

Gebruiker
Lid geworden
24 jun 2009
Berichten
12
Beste helpmijn.nl forum bezoekers,

Onderstaande vraag had ik al op een ander forum gezet maar ik denk dat het hier meer zin heeft. Ik heb stad en land afgezocht naar de oplossing maar kom er niet uit. Wellicht iemand van jullie?

Momenteel ben ik bezig met een programma om stagiaires te registreren, echter kom ik niet uit een bepaalde filter.

Zojuist wilde ik met deze filter in Access gegevens proberen aan het oproepen, dit d.m.v. het commando DoCmd ApplyFilter, zie onderstaande code:

Code:
Private Sub GO__Click()
On Error GoTo Err_GO_Click

    DoCmd.ApplyFilter([Zoeken],[Overzicht Stagaires]![Achternaam] Like "*" & [Forms]![Sta Search]![SearchAchternaam] & "*" And [Overzicht Stagaires]![POK] Like "*" & [Forms]![Sta Search]![searchpok] & "*" And [Overzicht Stagaires]![Actief] Like "*" & [Forms]![Sta Search]![searchactief])

Exit_GO_Click:
    Exit Sub

Err_GO_Click:
    MsgBox Err.Description
    Resume Exit_GO_Click

End Sub

Wanneer ik deze uit probeer te voeren krijg ik deze melding:Compileerfout Syntaxisfout

Het kan ook met de macro apply filter maar ik heb meer als 3 zoekvelden die gecontroleerd dienen te worden, vandaar dat ik het om wil zetten naar VBA DoCmd Apply Filter.

Wie ohw wie kan mij helpen? Waar zit de fout?!

:thumb:
 
Je gebruikt velden uit een aantal verschillende formulieren; zijn die allemaal wel geopend? Dat zou een oorzaak kunnen zijn.

Michel
 
Je gebruikt velden uit een aantal verschillende formulieren; zijn die allemaal wel geopend? Dat zou een oorzaak kunnen zijn.

Michel

Hoi Michel,

Dank je wel voor je reactie, meerdere formulieren? Ik heb 1 zoekformulier waar ik een aantal velden heb die ik vul en die moeten gezocht worden in een aantal velden van de tabel overzicht stagaires?
 
OK, dus als ik het goed begrijp is:

[Forms]![Sta Search]![searchpok]
[Forms]![Sta Search]![SearchAchternaam]
[Forms]![Sta Search]![searchactief]

het geopende zoekformulier waarvandaan je de zoekactie opstart, en is

[Overzicht Stagaires]![POK]
[Overzicht Stagaires]![Achternaam]
[Overzicht Stagaires]![Actief]

de tabel waarin je wilt zoeken?

In het welk geval de vraag dus is: zijn formulier en tabel wel open?

Het is een vrij ingewikkelde constructie, maar dat zou geen belemmering mogen zijn. Wat je zou kunnen doen is de filterstring in een variabele zetten, en die uitlezen in een messagebox. Dit geeft je een beter inzicht in wat je eigenlijk vraagt van het filter.

Dan krijg je dus zoiets:

Private Sub GO__Click()
On Error GoTo Err_GO_Click
Dim sFilter as String

sFilter="[Overzicht Stagaires]![Achternaam] Like "*" & [Forms]![Sta Search]![SearchAchternaam] & "*" And [Overzicht Stagaires]![POK] Like "*" & [Forms]![Sta Search]![searchpok] & "*" And [Overzicht Stagaires]![Actief] Like "*" & [Forms]![Sta Search]![searchactief]"

MsgBox sFilter
DoCmd.ApplyFilter([Zoeken], sFilter)
Exit Sub

Err_GO_Click:
MsgBox Err.Description

End Sub

Wat levert dit op?
 
Compileerfout: Sintaxisfout

Hierbij arceert hij in het blauw de volgende regel: DoCmd.ApplyFilter([Zoeken], sFilter)

Waar [Zoeken] vandaan komt weet ik niet? Dit staat ook al in het script uit de openingspost... hmmz
 
En als je dat [Zoeken] eens weghaalt? Ik dacht in eerste instantie dat dat de naam van het originele formulier was, vandaar ook mijn vraag of je alle formulieren wel geopend had.
Als het geen formuliernaam is, moet het op zeker weg.

Verander de msgbox eens in:

tmp=Inputbox("";"";sFilter)

Je krijgt dan een inputbox waar de string in staat. Die kan je dan kopiëren, en dan in kladblok bekijken. En uiteraard hier posten, kunnen we meekijken...

Michel
 
Misschien heb je Option Explicit bovenaan het VB scherm staan. In dat geval moet je aan het begin van de procedure de volgende regel toevoegen:

Dim tmp as String

En de ; (puntkomma's) moet je vervangen door , (komma's).

Foutje....

Michel
 
Laatst bewerkt:
Option Explicit zie ik nergens terug? Mijn code is nu zo:

Code:
Private Sub GO_Click()
On Error GoTo Err_GO_Click
Dim tmp As String

Dim sFilter As String

sFilter = "[Overzicht Stagaires]![Achternaam] Like " * " & [Forms]![Sta Search]![SearchAchternaam] & " * " And [Overzicht Stagaires]![POK] Like " * " & [Forms]![Sta Search]![searchpok] & " * " And [Overzicht Stagaires]![Actief] Like " * " & [Forms]![Sta Search]![searchactief]"

MsgBox sFilter
tmp = InputBox("", "", sFilter)
Exit Sub

Err_GO_Click:
MsgBox Err.Description

Echter krijg ik nu de melding Typen komen niet met elkaar overeen?

Vreemd....
 
Nogmaals omhoog, hij doet het nog niet?! Wellicht dat iemand een voorbeeld kan geven van deze functie?
 
Ik bedenk me nu dat je waarschijnlijk een foutje hebt in de samengestelde string:
Je gebruikt, zoals je ook in ee query zou doen, een dubbel aanhalingsteken, zoals bij Like " * " . Jammer genoeg ziet VBA dat als het einde van de tekststring... dat genereert bij jou dus vermoedelijk de foutmelding. Ik neem aan, dat de msgbox dan ook helemaal niet in beeld komt, omdat hij daarvoor al fout is gelopen.
Je kunt de dubbele aanhalingstekens vervangen door enkele, zoals in onderstaande code.

sFilter = "[Overzicht Stagaires]![Achternaam] Like ' * ' & [Forms]![Sta Search]![SearchAchternaam] & ' * ' And [Overzicht Stagaires]![POK] Like ' * ' & [Forms]![Sta Search]![searchpok] & ' * ' And [Overzicht Stagaires]![Actief] Like ' * ' & [Forms]![Sta Search]![searchactief]
Probeer 'm nu nog eens?

Michel
 
Nu krijg ik eerst een popup met deze code

Code:
[Overzicht Stagaires]![Achternaam] Like ' * ' & [Forms]![Sta Search]![SearchAchternaam] & ' * ' And [Overzicht Stagaires]![POK] Like ' * ' & [Forms]![Sta Search]![searchpok] & ' * ' And [Overzicht Stagaires]![Actief] Like ' * ' & [Forms]![Sta Search]![searchactief]

En vervolgens een popup met een invoerveld waar diezelfde code in staat en de optie ok of annuleren

Het zoekscherm voert niets uit verder.
 
Is het mogelijk om een gestript voorbeeldbestand neer te zetten? Want ik ben vrees ik door mijn opties heen; ik denk dat je filterstring te ingewikkeld is om zo uit te voeren, ook al omdat je twee formulieren met elkaar vergelijkt.
Misschien moet je de gegevens verzamelen met een query en die als basis gebruiken voor je filter.

Michel
 
Dit is de volledige opdracht die onder de gebeurtenis "bij klikken" hangt

Code:
Private Sub GO_Click()
On Error GoTo Err_GO_Click
Dim tmp As String

Dim sFilter As String

sFilter = "[Overzicht Stagaires]![Achternaam] Like ' * ' & [Forms]![Sta Search]![SearchAchternaam] & ' * ' And [Overzicht Stagaires]![POK] Like ' * ' & [Forms]![Sta Search]![searchpok] & ' * ' And [Overzicht Stagaires]![Actief] Like ' * ' & [Forms]![Sta Search]![searchactief] "

MsgBox sFilter
tmp = InputBox("", "", sFilter)
Exit Sub

Err_GO_Click:
MsgBox Err.Description

End Sub

Wil je er nog eens 1 keer naar kijken, het bestand is dermate groot dat het niet eenvoudig te strippen is. Mocht het echt niet lukken dan hoor ik het graag, dan kijk ik alsnog of het bestand te strippen is.

Al vast heel erg bedankt voor je meedenken!
 
Kan er iemand anders een goed voorbeeld geven van de juiste manier voor het toepassen van dit filter?
 
Kun je het resultaat van tmp = InputBox("", "", sFilter) hier posten? Ik wil graag zien wat de feitelijke filterstring nu inhoudt.

Michel
 
Wat mij nog steeds verbaast, is dat hij consequent de veld-en formuliernamen laat zien, en geen feitelijke inhoud. De filterstring moet uiteindelijk gegevens krijgen uit het formulier, en geen objectnamen, want die zal hij natuurlijk nooit terugvinden in de tabellen.
Er vanuit gaande, dat je formulier [Sta Search] heet, wil je de inhoud van het veld [SearchAchternaam] in de filterstring zetten. Het resultaat zou dus iets moeten zijn als:
Overzicht Stagaires]![Achternaam] Like ' * ' Janssen & ' * ' And [Overzicht Stagaires]![POK] Like ' Q32

Heb je al eens geprobeerd om de waarden van de formuliervelden goed uit te lezen? Want volgens mij gaat daar iets niet helemaal jofel...

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan