Filteren op basis van tekstbox of keuzelijst

Status
Niet open voor verdere reacties.

jaspervdh

Gebruiker
Lid geworden
29 nov 2016
Berichten
53
De rede van het openen van het forum is een beetje verwaterd en veranderd in een vraag van filter commando.

Hallo,

Ik wil in mijn database een facturatie systeem maken. Maar ik heb geen flauw idee waar ik moet beginnen.

Heeft er misschien een tutorial om er een te maken of een sjabloon (Ik heb zelf wel Noordenwind gevonden maar die is zo ontzettend uitgebreid dat ik daar niks mee kan)

Groet,
Jaspervdh
 
Laatst bewerkt:
Je zult toch zelf met een opzetje moeten komen, want een doorsnee systeem bestaat denk ik niet; is toch allemaal maatwerk. Zo zal jouw facturatie gebaseerd zijn op jouw activiteiten, en dus vermoedelijk op een bestellingentabel of een verkooptabel werken. Nooordenwind is wat dat betreft best een goed voorbeeld, en ik zou er zelf niet veel minder van kunnen maken...
 
Het moet een algemeen systeem zijn dat meerdere bedrijven het kunnen gebruiken.
 
Niet perse verkopen, maar het is wel de bedoeling dat het voor meerdere bedrijven is bedoeld ja.

Laat ik die 2 zinnen samenvoegen: Ik wil in mijn database een algemeen facturatie systeem maken dat door meerdere (soorten) bedrijven gebruikt kan worden.
 
Dan heb je vast al een basis database gemaakt, en als dat zo is zou ik zeggen: post die er eens bij met wat dummydata. Kunnen we ongeveer zien welke kant het op kan gaan.
 
Klopt, Is welles waar echt nog een enorme rotzooi. Wil hem best voor je plaatsen. Maar er staan een hoop dingen in die niet gebruikt worden (gooi ik op het laatste als die klaar is allemaal weg) Bovendien is die nog niet klaar.
 
Ik zal er vanavond een blik op werpen!
 
Dat zou ik waarderen.

Als je dan toch bezig bent op de pagina Start staat nu subformulier_werklijst5 en daarboven een aantal opties. Het is de bedoeling als je een tekstbox/keuzelijst invult dat die het subformulier dan filtert. Krijg het alleen niet voor elkaar...

Wachtwoord van vb is W@lkom01
 
Beste,

ik zou achter elke keuzelijst de afterupdate vervangen door gewoon cmdFilter_Click (voeg ook een filterknop toe met die naam)
en dan de volgende code gebruiken ( eventueel nog aan te passen met de verschillende codes achter de quotes volgens dat het numeriek of tekst, of datum is)
code die ik van 't net heb geplukt indertijd en die ik omgevormd voor verschillende filterform gebruik waar je heel ver kunt in gaan.
Code:
Public Sub cmdFilter_Click()
    'Purpose:   Build up the criteria string form the non-blank search boxes, and apply to the form's Filter.
    'Notes:     1. We tack " AND " on the end of each condition so you can easily add more search boxes; _
                        we remove the trailing " AND " at the end.
    '           2. The date range works like this: _
                        Both dates      = only dates between (both inclusive. _
                        Start date only = all dates from this one onwards; _
                        End date only   = all dates up to (and including this one).
    Dim strWhere As String                  'The criteria string.
    Dim lngLen As Long                      'Length of the criteria string to append to.
    Const conJetDate = "\#mm\/dd\/yyyy\#"   'The format expected for dates in a JET query string.
    
    '***********************************************************************
    'Look at each search box, and build up the criteria string from the non-blank ones.
    '***********************************************************************
    
    If Not IsNull(Me.Keuzelijst133) Then
        strWhere = strWhere & "([Id] Like " & Me.Keuzelijst133& ") AND "
    End If

    If Not IsNull(Me.Keuzelijst137) Then
        strWhere = strWhere & "([Id] Like " & Me.Keuzelijst137& ") AND "
    End If
    
    
    'Another text field example. Use Like to find anywhere in the field.
    'If Not IsNull(Me.txtFilterMainName) Then
        'strWhere = strWhere & "([MainName] Like ""*" & Me.txtFilterMainName & "*"") AND "
    'End If
    
    'Number field example. Do not add the extra quotes.
    'If Not IsNull(Me.cboFilterLevel) Then
        'strWhere = strWhere & "([LevelID] = " & Me.cboFilterLevel & ") AND "
    'End If
    
    'Yes/No field and combo example. If combo is blank or contains "ALL", we do nothing.
    'If Me.cboFilterIsCorporate = -1 Then
       ' strWhere = strWhere & "([IsCorporate] = True) AND "
    'ElseIf Me.cboFilterIsCorporate = 0 Then
       ' strWhere = strWhere & "([IsCorporate] = False) AND "
    'End If
    
    'Date field example. Use the format string to add the # delimiters and get the right international format.
    'If Not IsNull(Me.txtStartDate) Then
     '   strWhere = strWhere & "([EnteredOn] >= " & Format(Me.txtStartDate, conJetDate) & ") AND "
    'End If
    
    'Another date field example. Use "less than the next day" since this field has times as well as dates.
    'If Not IsNull(Me.txtEndDate) Then   'Less than the next day.
     '   strWhere = strWhere & "([EnteredOn] < " & Format(Me.txtEndDate + 1, conJetDate) & ") AND "
    'End If
    
    '***********************************************************************
    'Chop off the trailing " AND ", and use the string as the form's Filter.
    '***********************************************************************
    'See if the string has more than 5 characters (a trailng " AND ") to remove.
    lngLen = Len(strWhere) - 5
    If lngLen <= 0 Then     'Nah: there was nothing in the string.
        MsgBox "No criteria", vbInformation, "Nothing to do."
        'cmdReset_Click
    Else                    'Yep: there is something there, so remove the " AND " at the end.
        strWhere = Left$(strWhere, lngLen)
        'For debugging, remove the leading quote on the next line. Prints to Immediate Window (Ctrl+G).
        'Debug.Print strWhere
        
        'Finally, apply the string as the form's Filter.
        Me.[Subformulier Werklijst5].Form.Filter = strWhere
        Me.[Subformulier Werklijst5].Form.FilterOn = True

    End If
End Sub
 
Kijk, als je wilt weten hoe je generiek kunt filteren, naar het hoofdstuk over filteren in de Access cursus, daar vind je een beter voorbeeld. Deze code van Johan zou ik zo zelf nooit gebruiken, want er mankeert nogal wat aan :).
 
Ik ga morgen is kijken naar die code & handleiding.

Was het nog gelukt met de facturatie?
 
Ik ben nog aan het onderzoeken wat je aan het doen bent :).
 
Welke handleiding bedoel je precies? Die ik gevonden heb met 'filter' in de omschrijving is nummertje 15 van jou. Alleen daar gaat het over knoppen. Weet niet of ik daar wat aan heb. (of kijk ik scheel?)

//De filters zijn gelukt op 3 na. De klant, want hier filtert die op id en niet op de naam van de klant. En de datum's.

////Datum is nu ook gelukt, niet op de manier ik het wilde maar het werkt. Alleen die naam van die klant blijft een issue

//////Ik krijg het niet voor elkaar om op naam te filteren ipv op id.
Gebruik dit als broncode:

Code:
Private Sub Tekst147_AfterUpdate()
Dim strfilter As String

Me.Refresh

If Not IsNull(Me.Tekst147) Then

strfilter = "klant like '*" & Me.Tekst147 & "*'"
Me.Subformulier_Werklijst5.Form.Filter = strfilter
Me.Subformulier_Werklijst5.Form.FilterOn = True
End
Else
Me.Subformulier_Werklijst5.Form.FilterOn = False

End If

End Sub
En de instellingen die heb je.
zie

Vond afterupdate toch wat mooier als een losse knop zoals bij Johan. Maar ben er wel opgekomen door die code.
of zal ik hiervoor een los topic maken?
weer een...
 
Laatst bewerkt:
Ik zou, als ik je db een beetje goed interpreteer, toch anders werken. Zo gebruik je nu volkomen nodeloos een subformulier op het startformulier dat de zaak nodeloos ingewikkeld maakt. Nergens voor nodig, want je kunt het subformulier prima als hoofdformulier gebruiken en in de koptekst ervan je filteropties zetten.
Daarnaast is de AfterUpdate geen handige manier van werken, omdat je eerst de focus ergens anders op moet zetten. Een losse knop is dat ook niet, zoals ik al zei. Ik gebruik <Bij Klikken> als het om keuzelijsten gaat (uiteraard zonder LIKE, want dat slaat bij keuzelijsten nergens op) en <Bij Wijzigen> op tekstvakken, zodat je het formulier gelijk 'live' filtert op de tekst die je intypt. Zie je gelijk of je genoeg hebt gefilterd, of verkeerd.

Een versimpelde versie van mijn filterfunctie staat in dit draadje. Hoofdstuk 13 van de cursus behandelt ook een deel van de filtertechniek trouwens.

Ik zal jouw formulier aanpassen naar zoals ik het zou doen.
 
Ja, ik had eerst ook by change gedaan. Alleen dan kan je maar 1 teken gebruiken en dat voert die hem al in. Dat is niet erg handig.

Die code, tja... Ik ken het dusdanig niet goed genoeg en dan gaat zo'n lange code er al heel snel uit als chinees.

Die handleiding ga ik is bekijken.

Maar opzich het werkt nu wel. Je zegt dat je de focus ergens anders moet leggen, maar als je op enter drukt doe je dat in principe ook. Bij de keuzelijsten gaat dat natuurlijk niet, maar daar filterd die hem ook automatisch bij mij.
Alleen filtert die van de contacten dus op het id van de klanten en niet op de naam.
 
Alleen dan kan je maar 1 teken gebruiken en dat voert die hem al in. Dat is niet erg handig.
Juist wel! Je filtert je formulier dan direct op basis van de tekst, beter kun je het niet maken!
 
Ja dat snap ik, maar ik wil wel een heel woord, en niet maar 1 letter.

Of doe ik iets verkeerd?

/Update Ik krijg het maar niet voor elkaar om een textbox te laten filteren naar een persoon. Krijg hem wel werkend met een keuzelijst, maar dat wil ik niet. Ik wil juist een textbox. Maar als ik hem instel voor keuzelijst (dus werkend) en dan simpelweg verander naar een textbox gaat die alweer op ID filteren en niet op Naam...
 
Laatst bewerkt:
Ik denk dat je iets verkeerd doet, want met mijn filterfunctie kun je gewoon complete teksten typen om te filteren. Je begint (logischerwijze) met één letter. Dat dan weer wel :).
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan