Filteren op basis van tekstbox of keuzelijst

Status
Niet open voor verdere reacties.
Ik lees nou pas je tweede opmerking.... Een keuzelijst werkt altijd met gehele veldwaarden; je kiest uit de lijst een record en krijgt dan het ID terug. Dat is een getal. Een keuzelijst filteren op tekst kan dus alleen op een van de andere velden. Je moet het filter dan met LIKE opbouwen. Anders wordt het als het tekstveld zelf op het formulier staat; dan zou mijn functie dat probleemloos moeten kunnen filteren. Heb je dat tekstveld met de naam er niet bij staan, dan moet je dus in de onderliggende query dat tekstveld erbij zetten.
 
Moet eerlijk zijn dat ik vergeten was om naar je script te kijken. Maar die is zo lang & ingewikkeld, ik snap daar niet zoveel van. Weet ook niet wat ik allemaal moet veranderen om hem werkend te krijgen.

En ja tuurlijk begin je met 1 letter. Maar als ik er 1 intyp filtert die meteen, en als ik dan een 2e type verdwijnt de eerste.

[video=youtube;_eu3BJacQ3o]https://www.youtube.com/watch?v=_eu3BJacQ3o&feature=youtu.be[/video]
Dit is dus het gekke. Als ik hem op keuzelijst zet doet die het wel, en op tekstbox niet.
 
Laatst bewerkt:
Het leuke is: de functie werkt altijd, mits je de inrichting van het formulier op orde hebt :). Dat is ook het mooie van een generieke functie: het maakt niet uit waar je hem neerzet! In beginsel hoef je de code dus helemaal niet aan te passen, want de functie werkt gewoon. Wat bij jou het probleem is, is dat de cursor na het intypen van een letter niet achter de laatste letter staat zodat je door kan typen met een volgende. En dat moet natuurlijk wel, anders blijf je op één letter filteren.
 
Dus je zegt als ik hem plak werkt die? Dan ga ik dat is proberen, betwijfel het een beetje namelijk.
 
Overigens komt jouw probleem niet eens door mijn filter denk ik, maar doordat je in bijna elke tabel wel één of meer keuzelijsten gebruikt. Ik ben al een half uur bezig om die weer terug te zetten naar tekstvelden! Ik zou zeggen: leer dat zo snel mogelijk af, want je hebt alleen jezelf ermee. Keuzelijsten zijn voor formulieren, niet voor tabellen!.
 
Had jou script geplakt onder
Private Sub text4_onfocus() (dit is onderwerp)
en onder
Private Sub Form_GotFocus()

Beide geen effect.

Keuzelijst voor formulier niet voor tabel? Maar hoe geef je de waarde van een keuzelijst op in een formulier als in het tabel perse die waardes gebruikt moeten worden. En naar mijn idee heb ik alleen een keuzelijst gebruikt op moment dat de data uit een ander tabel moet komen (klanten,werknemers,contacto (manier waarop contact gelegd is) en swerklijst (status van een project)

sorry als ik een beetje bot overkom, dat is niet de bedoeling.
 
Had jou script geplakt onder
Private Sub text4_onfocus() (dit is onderwerp)
en onder
Private Sub Form_GotFocus()

De functie moet je in ieder geval niet onder een knop hangen, maar in een aparte module neerzetten. Er zaten een paar kleine foutjes in (komma vergeten bij een variabele declaratie bijvoorbeeld) dus ik ben hem aan het opschonen in jouw db.

Wat betreft de vraag over de keuzelijsten: Tabellen moeten in mijn optiek altijd de opgeslagen waarden laten zien en niet de een of andere alias (naamveld bijvoorbeeld zoals jij doet) uit een gekoppelde tabel. Hoe weet jij welk ID klant 'Japie' heeft in de tabel [Werklijst] als je niet de waarde 12 ziet staan, maar 'Japie'? En waar denk je dat je op filtert als je een filter maakt: op 'Japie' of op 12? De vraag stellen is hem beantwoorden :). Je ziet dus 'Japie', maar je filtert op 12.... Dát is voor mij de belangrijkste reden om in tabellen nooit keuzelijsten te gebruiken! Er zijn er meer trouwens: in exports (naar Excel bijvoorbeeld) krijg je óók de echte waarde (12) te zien, en niet 'Japie'. Nee, keuzelijsten horen echt niet thuis in een tabel!

Zoals ik al zei: keuzelijsten maak je op formulieren, en die baseer je dan uiteraard op de tabellen waar de gegevens uitkomen. Dus in het veld [Naam] (klantID leek mij logischer trouwens) sla je het KlantID op (12), maar in de keuzelijst zie je 'Japie'. De Afhankelijke kolom is dus de (meestal onzichtbare) kolom met het sleutelveld, en de overige velden gebruik je om de selectie te maken. Klanten.ID sla je dus op in Werklijst.KLant.
Er is één uitzondering op de regel: keuzelijsten die je baseert op een lijst van waarden. Een keuzelijst [Geslacht] bijvoorbeeld, kent maar 2 of 3 opties. Daar maak ik dus geen tabel voor, maar gebruik ik een keuzelijst op basis van getypte waarden. Maar dat is ook echt het enige...
 
Oh, dat had ik niet helemaal door, alleen ergens in het begin. Zal rustig afwachten tot je klaar bent.

Hij filtert inderdaad op 12, dat vind ik ook prima. Maar ik wil eigenlijk bij klanten geen keuzelijst, maar een tekstbox.

Dus als ik het goed begrijp doe jij overal tekstvakken maken in tabellen. En op moment dat je op formulier niveau zit maak je er een keuzelijst van dat er uiteindelijk wel de naam staat (ofja id, maar je ziet de naam).
 
Laatst bewerkt:
Ik ben aan het kijken, maar jouw db is zó totaal anders als dat ik hem zou opzetten.... het is lastig om je dan in zo'n db te verplaatsen. Kost tijd!
 
Heb overigens al een sjabloon gevonden (reden van topic openen) Dus dat probleempje is opgelost.
 
Dan kan ik met een gerust hart aan het bier :).
 
Ik bedoel dat factuur sjabloon (de rede van het topic) alleen is het inmiddels veranderd naar het filter probleem :O
 
Ik heb je voorbeeldje even aangepast en de functie ook; op dit moment kun je met één keuzelijst en 2 tekstvakken filteren; die hebben een geel label. Ik denk dat je de rest van de objecten zelf wel kan toevoegen. Vanwege de grootte van de zip heb ik die hernoemd naar .xlsb, dus wel even terugzetten naar .zip en uitpakken.
 

Bijlagen

Intressant systeem. Zie dat je alle rotzooi weggegooid hebt, vraag me alleen af waarom je form en werklijst (formulieren) wel bewaard hebt.

Inhoudelijk op het script. Ligt het aan mijn access want hij filtert nu iedere letter die ik invoer appart, op moment dat ik een 2e letter invoeg verwijderd die de 1e weer. Voor de rest werkt het in principe wel.
Hmm, wilde de rest invullen maar krijg ze op een of andere manier niet werkend.
Moet ik nog meer invullen als:

Code:
Private Sub keuzelijst133_Change()
    CheckFilter Me, Me.Keuzelijst133
End Sub
 
Zie dat je alle rotzooi weggegooid hebt, vraag me alleen af waarom je form en werklijst (formulieren) wel bewaard hebt.
Luiheid :D.
Het filtert selecteert de eerder ingevoerde tekst, daar zou hij de cursor achter moeten zetten, maar die code doet het niet goed nu. In mijn eigen systemen zet ik de Selstart = Sellenght daarom ook bij de tekstvelden zelf, dat werkt wel goed.
Nu moet je ofwel de cursor achter de tekst klikken, of eerst op <F2> drukken voordat je verder typt. De keuzelijst die ik heb voorbereid doet het prima, als je de andere keuzelijsten wilt gebruiken moet je de veldnaam waar de keuzelijst op moet filteren in de eigenschap <Extra Info> zetten, want die veldnaam wordt met de .Tag weer uitgelezen. Vul je de veldnaam niet in, dan valt er dus niks te filteren.
 
Hmm, Krijg de keuzelijst wel aan de praat, maar de open tekstvelden blijven errors geven.

Trouwens, heb inmiddels 2 van die formulieren die gefilterd moet kunnen worden. Kan ik dat gewoon hetzelfde ding gebruiken of moet er een extra module voor aangemaakt worden of hoe zit dat?

Oh, en heb een ja/nee veld wat voor script kan je daarvoor gebruiken?

//oh wilde de foutmelding erbij zetten. Dus wilde hem opzoeken maar nu doet die helemaal niks meer...
 
Laatst bewerkt:
Je kunt, mits de zoekvelden correct zijn ingericht, dezelfde functie blijven gebruiken, dat is het mooie ervan :). Ik zag in jouw voorbeeldje dat ik dus heb teruggestuurd maar 2 tekstvelden die je kon filteren, en die heb ik gebruikt. Je andere 'tekstvelden' zijn niet geschikt voor wat jij wilt (filteren op de keuzelijsten vermoed ik). Tekstvelden filter je met tekstvelden, keuzelijsten met keuzelijsten (met invoervak). Wil je een keuzelijst met invoervak op meerdere waarden filteren, dan zul je die waarden met een gewone keuzelijst die je instelt op meerdere waarden moeten filteren. Ook daar zit de routine voor in de functie.
 
Sorry, begrijp niet helemaal wat je zegt. (begrijpend lezen blijft een zwak punt bij mij, sorry)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan