Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[Access] recordset.Find + Syntax

Anoniem
MichielPH
4 antwoorden
  • Hey,

    Ik ben met access, VBA en ADO bezig. Ik heb via VBA een tabel geopend middels:[code:1:d173ad7955]strSQL = "SELECT * FROM tblZijde"
    Set rsZijde = New Recordset
    rsZijde.Open strSQL, conDatabase, adOpenDynamic, adLockOptimistic[/code:1:d173ad7955]
    Als ik wil zoeken met een enkele zoekterm gaat dat prima, als ik meerdere termen wil zoeken weet ik echter niet hoe ik dat aan elkaar 'plak'.
    Als ik het met het volgende stuk code probeer:[code:1:d173ad7955]rsZijde.MoveFirst
    rsZijde.Find "(ProductID = " & rsProducten.Fields("ID").Value & ") AND (Zijde = " & Zijde & ")"[/code:1:d173ad7955]wat het de volgende string opleverd:[code:1:d173ad7955](ProductID =24567) AND (Zijde = 1)[/code:1:d173ad7955]dan krijg ik de volgende foutmelding: [i:d173ad7955]De argumenten zijn van het verkeerde type, vallen buiten het toegestande bereik of zijn in conflict met elkaar.[/i:d173ad7955]

    Beide variabelen zijn integers. Wat moet ik ipv 'AND' gebruiken?
    Bedankt!
  • Voor zover ik het begrijp, werkt RecordSet.Find slechts met één enkele zoekconditie. De makkelijkste oplossing is om de conditie op te nemen in de querystring waarmee je de recordset opent. Dus:
    [code:1:afa152b035]
    rs.Open "SELECT x FROM y WHERE a=b AND c=d"
    [/code:1:afa152b035]

    Als dat geen optie is (omdat je toch de volledige, initiële recordset moet gebruiken), dan zal je meerdere malen de Find moeten uitvoeren en de resultaten via de code moeten combineren.

    Overigens lijkt mij de eerste methode verreweg het eenvoudigst. De Find method van een recordset positioneert de pointer van de recordset naar het eerste record wat matched; en dat betekent - wanneer er meerdere matches zijn - dat je dan met een Find door de recordset moet loop-en tot je alle matches hebt gehad. En dat dan voor alle zoekcondities die je wil matches.
    De eerste methode geeft je gewoon direct een recordset terug met alle resultaten die matchen.
  • Je kan ook de Filter-methode gebruiken. Hierbij mag je wel meerdere condities gebruiken.
    [code:1:ecee945e92]rsZijde.Filter = "(ProductID = " & rsProducten.Fields("ID").Value & ") AND (Zijde = " & Zijde & ")"[/code:1:ecee945e92]
    Je kan dan de hele tabel in de recordset gooien, en toch op bepaalde plaatsen in je code alleen een selectie uit de tabel gebruiken.
    Meer info over de Filter methode
  • Michiel,

    Is je filterstring wel in orde? Ik zie …Fields("ID")…, ofwel de string eindigt plotseling, terwijl er nog wat tekst achter komt. Daar kan VBA (en vele andere talen) niet mee uit de voeten.
    Als de je " werkelijk nodig hebt, kun je die dubbel invoeren. Het kan mijn fout zijn: misschien staan er wel 2 '-en, maar een kopie naar Notepad laat echt een enkele " zien.

    Groeten, Maarten.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.