Zoek resultaten van en query weergeven in het formulier

Status
Niet open voor verdere reacties.

Kurt87

Gebruiker
Lid geworden
9 sep 2013
Berichten
14
Beste mensen,

Ik ben bezig met een database programma te schrijven voor het onderzoek waar ik aan werk. We moeten mensen bellen dus ik ben hiervoor een formulier aan het maken. Ik heb met behulp van query's 2 zoek functies ingevoerd maar ik wil deze weergeven in het formulier zelf. Zodat je vervolgens 1 iemand kan selecteren en dan handmatig naar het andere tabblad toe waar dan alle info over de persoon staat. Maar hoe doe ik dit.......? (ik dacht zelf aan een keuzelijst met invoervlak, maar hoe) Ik heb de gehele cursus doorgelezen en ik kwam er niet niet uit. Ik heb mijn try out bestand toegevoegd wat mijn vraag hopelijk verduidelijkt.

Wat volgens mij 1 van mijn problemen is is dat ik geen primaire sleutel heb in mijn bestand. Kan ik deze achteraf nog toevoegen of moet ik dan een geheel nieuw bestand maken?

Hopelijk kan iemand me hierbij helpen.

Groet,
Robert
 

Bijlagen

Velden als: Expr5: voorbeeld.[Belpogingen op datum (5 mogelijkhedn om data in t] gaan natuurlijk niet werken, want die bestaan niet in je tabel. Ik vermoed dat je daar een parameter van had willen maken?
Dat je geen sleutelveld hebt, is overigens voor het filteren niet van belang. Je krijgt dan alleen meer treffers, als je een zoekwaarde gebruikt die vaker voorkomt.
 
Verder doet je query het prima, als je de rare velden er uithaalt. Het formulier zou je overigens kunnen filteren, dan heb je die query niet nodig.
 
Hartelijk dank voor je reactie. Het klopt inderdaad dat er wat velden ontbreken die wel in de query staan. Het bestand was te groot om te uploade dus ik heb wat dingen weg gesnoeid maar vergeten uit de query te halen.

Ik ben inderdaad blij dat ze werken. Mijn vraag is echter nog iets breeder. Ik zou graag de uitkomst van de query in een keuzelijst of iets anders dergelijks op het formulier willen zien zodat iemand het kan selecteren en dan naar het vorige tabblad kan voor de info over de persoon. Is dat mogelijk om te realiseren?
 
Je hebt nu een enkelvoudig formulier. Als je een doorlopend formulier maakt, zie je alle records. Als je vervolgens de tekstvakken (of aanvullende keuzelijsten) gebruikt om een filter mee te maken, dan ben je er.
 
Wederom dank voor je reactie. Ik heb zitten denk over een doorlopend en enkelvoudig formulier. Hoe ik het interpreteer is dat je op een doorlopend alle verschillende records uit de tabel ziet en op een enkel voudig niet. Hoe bouw ik mijn formulier dan om want ik heb het idee dat hij nu ook al doorlopend is.... En daarbij ben ik aan de slag gegaan met het gebruiken van die keuzelijst en het werkt handig om op te zoeken dus dat is fijn. Maar ik zou eigenlijk willen dat mijn keuzelijst 2 functies krijgt, zowel de eerste (uitkomst query weergeven) als de derde (het filteren van het formulier op de geselecteerde waarde) uit de wizard functie van access 2003. is dit mogelijk? en haalbaar voor een beginner zoals ik?
 
Een enkelvoudig formulier laat één record zien, en een doorlopend formulier (Vergelijkbaar met <Gegevensweergave>) meerdere. Een keuzelijst om te zoeken werkt prima; je blijft alle records zien uit de onderliggende tabel, en je kunt dus eenvoudig terug en doorbladeren. Bij filteren maak je een fysieke selectie van de tabel; je ziet dus altijd minder records. Om de weggefilterde records te zien, moet je eerst het filter verwijderen.
is dit mogelijk? en haalbaar voor een beginner zoals ik?
Dat zou voor mij al moeilijk zijn, en ik vind mijzelf bepaald geen beginner (al kan ik wel een paar personen noemen die mij een prutser vinden ;) )
Een keuzelijst gebruik je dus ofwel om te filteren, ofwel om te zoeken. Je kunt de twee codes nog wel op één keuzelijst gebruiken, maar dan moet je op een andere manier aangeven wat die keuzelijst moet doen. Bijvoorbeeld met een keuzelijst waaruit je kunt kiezen tussen <Filteren> of <Zoeken>. Lijkt mij een beetje het paard achter of naast de wagen spannen. Een selectievakje of radiobuttons kan natuurlijk
ook.
 
Ik had al het idee dat ik iets wat omslachtig bezig was..... Helaas. Maar hoe ga ik het nu voor elkaar krijgen dat iemand een zoekopdracht invoert, je meerdere uitkomsten ziet, iemand vervolgens op deze uitkomsten klikt en dat deze "persoon" dan over de verschillende tabbladen gefilterd word zodat je op het andere tabblad naar de gegevens van deze persoon kan kijken?
 
Je kunt aan het veld [persoon] een event hangen, bijvoorbeeld double click (dit vind je in het property sheet als je het veld aan klikt). Dan vervolgens bij event on dbl click. Als je hier een stukje VBA code aanhangt kun je snel een ander formulier openen en alvast filteren op de persoonsnaam. Het is wel makkelijk als je van het veld [persoon] een hypelink maakt, zodat je het herkent als link. Ook dat kan in het property sheet.

De code is als volgt:

Private Sub veldnaam_DblClick(Cancel As Integer)
DoCmd.OpenForm "formuliernaam", , , "persoon = '" & Me.persoon & "'"
End Sub

formuliernaam moet je wijzigen in de naam van het formulier waarnaar je vewijst.
persoon eventueel aanpassen aan de veldnaam die je hebt gekozen voor persoon.
De veldnaam bij private sub wordt vanzelf aangemaakt.

Succes!
 
Filteren (niet zoeken dus) doe je ook met een keuzelijst (met invoervak). Je kunt beide vormen gebruiken, dat hangt een beetje van de ruimte op je formulier af, en wat je mooier vindt. Op die keuzelijst maak je dan een <Bij klikken> gebeurtenis, die je formulier filtert. Je hebt het over verschillende tabbladen, wat eigenlijk te weinig informatie is. Als alle tabbladen namelijk op dezelfde rijbron werken, dan 'ziet' Access de tabbladen niet; je ziet dus overal hetzelfde record. Alleen zie je dan op elk tabblad een ander deel van de velden. Het filter instellen met de keuzelijst is dan genoeg om de tabbladen te verversen.
Anders wordt het als je op die tabbladen subformulieren hebt staan. Die moeten dan zijn gekoppeld aan het hoofdformulier, doorgaans op hetzelfde veld als waarop je de keuzelijst baseert. In dat geval moet er een gebeurtenis worden uitgevoerd die een Requery uitvoert op de subformulieren, zodat ze de nieuwe recordkeuze laten zien. Ik zie in dit verhaal overigens geen noodzaak voor een hyperlink...
 
Dank voor de tips, ik ga het uitproberen en ik laat jullie het weten wat de uitkomst is
 
Ik kreeg een mailtje met de vraag of mijn vraag al was opgelost, er is deze week wat anders tussen door gekomen dus ben er niet aan toegekomen, maandag pak ik het op en horen jullie het resultaat.
 
Geduld blijft een schone zaak :)
 
Ik heb het idee dat de laatste tip van Octafish mijn oplossing gaat zijn. Ben dus nu aan het proberen om bij de keuzenlijst een on_click gebeurtenis in te stellen dat hij filtert op het gene dat aangeklikt is. Dit lijkt me een makkelijke code maar ik ga ff kijken of ik het kan terug vinden.

Verder wat betreft de tabbladen, ik doe het inderdaad op die manier dat je verschillende tabbladen op 1 formulier heb dus dan ziet acces het niet als tabbladen. Dit speelt mij volgens mij juist in de hand want als het filter dan werkt doet hij dat meteen op alle tabbladen.

Toevoeging: Wat is de code voor een filter? ik kan het lastig terug vinden en ben al weer veel te veel tijd hier mee bezig.
 
Laatst bewerkt:
Ik gebruik zelf het liefst generieke code die ik ofwel in een functie zet, ofwel op het filterobject zelf. In het laatste geval is de code dan met simpel kopieëren en plakken zonder enig probleem in andere filterobjecten te gebruiken. Een voorbeeldje voor een tekstveld:
Code:
Private Sub txtFilter1_Change()
Dim sFilter As String, sNaam As String, sTag As String, sWaarde As String
    sNaam = Screen.ActiveControl.Name
    sTag = Screen.ActiveControl.Tag
    sWaarde = Me(sNaam).Text
    If Len(sWaarde & "") > 0 Then
        sFilter = "[" & sTag & "] Like '*" & sWaarde & "*'"
        Me.Filter = sFilter
        Me.FilterOn = True
        Me(sNaam) = sWaarde
        Me(sNaam).SelStart = Me(sNaam).SelLength
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
    Me(sNaam).SetFocus
End Sub
De enige regel waar je op moet letten is deze: sFilter = "[" & sTag & "] Like '*" & sWaarde & "*'". De Tag van een tekstveld of keuzelijst heet in het Nederlands <Extra info> en je vindt de optie bij de <Eigenschappen> van het object op het tabblad <Overige>. Hier; zet ik de veldnaam neer van het veld waarop ik wil filteren. Is dat het veld [Achternaam], dan staat daar dus 'Achternaam', is dat het veld [Postcode Leverancier] dan staat daar 'Postcode Leverancier'.
 
Ik heb je code eigenlijk gewoon geknipt en geplakt en de extra info aangepast zoals je zei, hij werkt niet maar ik heb het ook gebruikt als on_click functie dus daar zal het wel fout gaan. "Toevoeging: Hij doet toch zeker wel wat, is het mogelijk om het stukje sFilter = "[" & sTag & "] Like '*" & sWaarde & "*'" te vervangen door een code die staat voor het gene dat aangeklikt is?

Ze hebben vandaag ineens besloten om office 2010 te instaleren op server van mijn werk dus daar gaat het vertrouwde 2003... Wat een drama zeg dat 2010, alsof je opnieuw moet leren met het programma te werken.....

Nogmaals dank voor alle hulp en uitleg, fijn nog een licht puntje te hebben aan het einde van deze donkere tunnel ;)
 
Laatst bewerkt:
Als je wilt filteren op een tekstveld kun je beter de Change gebruiken zoals ik ook doe; dan filtert hij 'live' op de tekst die je intypt. Click doet niet zoveel, want waar klik je? In een tekstveld. Waar dan niks staat.
Of 2010 een drama is of niet, mag iedereen zelf beoordelen. Ik ben in ieder geval na zo'n jaar of 5 (vanaf 2007) klooien met de nieuwe interface ook soms nog steeds dolende, en ik kan ook nog steeds niet alles in één keer vinden wat ik in de oude versies met mijn ogen dicht kon. Op zich wel knap dus dat een bedrijf er zó goed in geslaagd een pakket te verbouwen dat ik mijn weg er nog steeds niet goed ik kan vinden. De hoeveelheid tijd die mij dat gekost heeft, moet onderhand in weken worden uitgedrukt. En wat heeft het opgeleverd? Kan ik nu meer als in 2003? Nee. Gaat het sneller? Nee. Zitten er nuttige nieuwe functies in? Nee. Zijn er zinvolle functies verdwenen? Ja. En dan hebben we het alleen nog maar over Access, waarin ik ondertussen wel weet hoe ik de zaken nu moet aanpakken. In programma's als Word en Excel, waarin ik relatief veel minder doe, kan ik nog steeds de simpelste opdrachten niet vinden zonder uitgebreid zoeken. Dank je wel Microsof!

Terug naar de vraag: Filteren zou in 2010 op dezelfde manier moeten werken als in 2003. Dus wellicht heb je een macro-beveiliging niet goed staan.
 
Oke, dus deze code zet ik op een text veld en dan filter hij automatisch op het gene dat ingevoerd is. Is het ook mogelijk om een vergelijkbare functie te maken waarbij je filtert aan de hand van meerdere textvelden? Dan is mijn probleem volgens mij opgelost.

Wat betreft access 2010, het is jammer dat ze zoveel veranderen waardoor het in het begin echt een dolhof lijkt. Ik kom er nu langzaam weer een beetje in maar kost helaas veel tijd voordat je je weer thuis voelt in het programma, helaas.
 
Natuurlijk kun je filteren op meerdere velden, alleen zul je dan het filter steeds moeten checken op die andere velden. Om te voorkomen dat je dan bij elk zoekveld de complete code moet neerzetten, kun je er dan beter een functie van maken, en die aanroepen.
 
Je zult het niet geloven maar het is me vandaag gewoon gelukt. Ik ben tevreden over de zoekfunctie en het formulier.

Nu nog een andere vraag, ik weet dat hij ergens in de handleiding voorkomt maar weet niet meer waar. Ik wil dat meerdere mensen tegelijkertijd hetzelfde formulier kunnen gebruiken. Wat moet ik hiervoor doen? Ik heb maar 1 tabel, ik kan me iets herrineren dat je er meerdere nodig hebt. Hoe kan ik dit het beste aanpakken?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan