Filteren lukt niet

Status
Niet open voor verdere reacties.

gangstalaz

Gebruiker
Lid geworden
13 sep 2010
Berichten
131
Hallo,

Ik heb een filtersysteem die ik van deze forum heb afgehaald proberen aan te passen. Ik krijg mijn gegevens wel in het formulier maar ik krijg deze maar niet gefilterd met de keuzevakken die boven in het formulier staan.

Hierbij de database:Bekijk bijlage Chiptuning.rar.

Ik werk met access 2010.

Alvast bedankt.
 
Als je een voorbeeldje aanpast, moet je de onderliggende code natuurlijk wel bestuderen om te zien wat je moet aanpassen voor je eigen situatie. Dat heb je ofwel niet gedaan, ofwel je snapt de code niet :)
Als we even naar één van de essentiële regels in de functie kijken, dan zie je waar je de fout in bent gegaan:
Code:
        If Me("f" & i).Name <> n And Len(Me("f" & i)) > 0 Then
            sFilterH = sFilterH & [B][COLOR=#0000FF]Me("f" & i).Tag [/COLOR][/B]& " LIKE " & sBegin & Me("f" & i) & "*" & Chr(34) & " " & sAndOr
        End If
Filteren doe je altijd op een tabelveld of formulierveld. Omdat een filter daardoor nogal star is, kun je zonder slimme trucjes geen filter maken dat flexibel is, omdat je allerlei combinaties wilt kunnen filteren. En dat houdt zonder slimmigheidjes in dat je alle mogelijke combinaties moet gaan opbouwen, wat tot nogal veel (dubbele) code kan leiden. In dat geval zou je kunnen volstaan door de veldnaam waar je op wilt filteren op te nemen in de naam van het zoekveld. De keuzelijst voor Merk zou dan cboMerk kunnen heten, en die voor Prijs cboPrijs. Zoals gezegd: je krijgt dan nogal wat code.

Daarom is voor een slimme oplossing gekozen, waarbij het veld wordt opgeslagen in een eigenschap van het filterobject (keuzelijst of tekstveld), en de zoekvelden zelf een gestandaardiseerde naam hebben, zoals c1, c2 en f1 en f2. In dit formulier is gekozen om de veldnaam op te slaan in de eigenschap <Extra Info>, die in het Engels Tag heet. In de filterfunctie wordt vervolgens die eigenschap Tag weer uitgelezen. En je raadt het probleem nu waarschijnlijk al: als in de Tag van de keuzelijst de naam van een niet-bestaand veld staat, dan doet het filter het niet. Dus: om het formulier werkend te krijgen, moet je de naam van de velden uit de detailsectie overbrengen naar de eigenschap <Extra info> van de bij het veld horende zoekveld. Dan doet hij het weer. Dus de Tag van het zoekveld f2 moet je veranderen van [DOCOnderwerp] naar [Verschil PK] om op dat veld te kunnen filteren. Let op dat de telling rechtsboven ook moet worden aangepast, want die telt ook op een verkeerd veld.
 
Bedankt voor je reactie Octafish.

Ik dacht dat ik alles had nagechecked maar ik had dat dus over het hoofd gezien.

Ik heb nu een ander klein probleempje. Dit zal vast ook iets met codes te maken hebben of juist iets wat ik dan weer niet zie. Ik kies bij de eerste keuzevak voor BMW. Hierna kies ik in de tweede keuzevak voor 5-serie. Dan hoor ik een stuk of 42 in mijn beeld te krijgen maar ik krijg er maar 4. Hoe komt dit?

Bekijk bijlage Chiptuning.rar

Alvast bedankt.
 
Ik snap niet helemaal wat je hebt aangepast, maar hij vult automatisch in het zoekveld [Prijs] (f6) de eerste waarde van BMW (400) in. En dat wordt mede gebruikt in het nieuwe filter als je daar een serie aan toevoegt. In mijn versie doet hij dat niet. Dus wat heb je verder nog aangepast?
 
Ik had de query aangepast die erbij zat en de code

Code:
Option Compare Database
Option Explicit
Dim sFilterH As String, sFilterHStukje As String, sFilter As String
Dim sBegin As String
Dim sAndOr As String
Dim ctl As Control
Dim i As Integer
Dim iAantalF As Integer
Dim iAantalC As Integer
Dim ctlCurrentControl As Control
Dim strSQL As String

Const sTabel = "tbl_chiptuning"
'Const iAantalF = 3
'Const iAantalC = 4
 
Hier een werkende versie; kun je daar weer verder aan sleutelen.
 

Bijlagen

Bedankt voor je hulp octafish. Maar als ik in jouw versie het volgende uitprobeer, lukt het ook niet.

BMW-> 5 serie-> 530d-> E60-2003 (krijg ik niks te zien, terwijl er 5 van dat bouwjaar moeten zijn).

Wat had je aangepast? Anders doe ik dat ook.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan