Selectie critera in header rapport

  • Onderwerp starter Onderwerp starter Risk
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.
Michel,

Driftig zitten veranderen, je kijkt niet op een uurtje of wat, maar er gebeurde helemaal niets. Niet helemaal waar, het selecteerde lukte op een gegeven moment niet meer.

Ben er vanuit gegaan dat het e.e.a. zit in de Function FilterMaken()

Code:
Function FilterMaken()
Dim sFilter As String


If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sRapportFilter = Me.cboVestiging
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If

If Me.cboNaam & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Naam] = '" & Me.cboNaam & "'"
End If

If Me.cboKenteken & "" <> "" Then
    If sFilter <> "" Then sFilter = sFilter & " AND "
    sFilter = sFilter & "[Kenteken] = '" & Me.cboKenteken & "'"
End If

If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function


Graag je hulp.

Risk
 
Ik vind dit een beetje rare oplossing:
Code:
If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sRapportFilter = Me.cboVestiging
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If

Je kijkt eerst of er een jaar is geselecteerd (Me.cboJaar & "" <> "") en op basis daarvan vul je de variabele sFilter, en kijk je of er een vestiging is. En zo ja, dan vul je de variabele sRapportFilter. Wat doe je als er geen jaar is, maar wel een vestiging? Dan wordt de variabele niet gevuld. Gek genoeg ga je daaronder verder met een aparte check op Vestiging die dus alleen wordt uitgevoerd als er geen jaar is gekozen. Maar dan wordt dus de variabele sRapportFilter niet meer gevuld. Ik zou het dus anders doen:

Code:
    If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
    End If
    
    If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
        sRapportFilter = Me.cboVestiging
    End If
 
Michel,

Ga aan de slag. Rare oplossing is verklaarbaar: leek. Is er ergens een goed boek verschenen hoe codes werken??

Wordt vervolgd.
 
Michel,

Nieuw invulscherm gemaakt en de code geplaatst. Wat blijft is de weergave: [Jaar]='2009' AND [Vestiging]='Amsterdam'. Dat [Jaar] [Vestiging] zou moeten verdwijnen.

Blijft een raadsel.


Code:
Function FilterMaken()
Dim sFilter As String


If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
    End If
    
    If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
        sRapportFilter = Me.cboVestiging
    End If


If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function
 
Ik kan zo niet zien hoe je het tekstvak vult; ik vermoed dat je in je opdrachtknop nog sFilter als OpenArgs meegeeft, en niet sRapportFilter.
 
Michel,

Alles geprobeerd, om zot van te worden:

Code:
DoCmd.OpenReport stDocName, acViewPreview, , sFilter, OpenArgs:=sFilter

Werkt niet


Code:
DoCmd.OpenReport stDocName, acViewPreview, , sRapportFilter, OpenArgs:=sFilter

werkt niet, zelfs het selecteren niet. Snap het niet.

Wat ik inmiddels wel weet hoe ik e.e.a. netjes in dit forum moet plaatsen.

De hele code:

Code:
Option Compare Database


Private Sub cboVestiging_AfterUpdate()
Call FilterMaken
End Sub

Private Sub cboJaar_AfterUpdate()
Call FilterMaken
End Sub


Function FilterMaken()
Dim sFilter As String


 If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
    End If
    
    If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
        sRapportFilter = Me.cboVestiging
    End If


If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function


Private Sub Knop405_Click()

stDocName = "Doorlooptijd schade op chauffeur"
Dim sFilter As String
If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sFilter = sFilter & " AND [Vestiging] = '" & Me.cboVestiging & "'"
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If


 
   Me.Form.Visible = False


DoCmd.OpenReport stDocName, acViewPreview, , sRapportFilter, OpenArgs:=sFilter

End Sub


Private Sub Reset_Click()
  
    Me.cboVestiging = ""
    Me.cboJaar = ""

    Call FilterMaken
    Me.Requery
End Sub
 
Ik haal even twee stukjes uit je code, en verwijs je dan naar mijn vorige post :D

Code:
    If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
[COLOR="#0000FF"][B]        sRapportFilter = Me.cboVestiging[/B][/COLOR]
    End If

En dit stuk:
Code:
DoCmd.OpenReport stDocName, acViewPreview, , [B][COLOR="#0000FF"]sRapportFilter[/COLOR][/B], OpenArgs:=[B][COLOR="#FF0000"]sFilter[/COLOR][/B]
 
Michel,

Alles geprobeerd. Onder FunctionFilter gewijzigd zoals aangegeven.
Sorteert niet meer en doet verder niets zoals gewenst.

Voor mij bijna een brug te ver.

Risk
 
Je hebt (althans: in de code hierboven) de filters verwisseld: het rapportfilter (dat eigenlijk geen filter is) gebruik je als filter (wat dus niet gaat werken) en het echte filter (inclusief de veldnamen die je niet wilt) laat je in het rapport zien. Dus dit zou moeten kloppen:

Code:
DoCmd.OpenReport stDocName, acViewPreview, , sFilter, OpenArgs:=sRapportFilter
Overigens heb je de variabele sRapportFilter nog niet gedeclareerd. Dat hoeft geen probleem te zijn als je Option Explicit niet gebruikt. Maar ik zou 't voor het mooie nog wel doen.
 
Michel,

Blijf het proberen.

Dus de code zet ik bij:

Function FilterMaken()
Dim sFilter As String

en niet bij:

Private Sub Knop405_Click()

stDocName = "Doorlooptijd schade op chauffeur"
Dim sFilter As String


en deze die kan ik niet plaatsen hoe en waar:

"Overigens heb je de variabele sRapportFilter nog niet gedeclareerd"
.

Wordt er niet eenvoudiger op al met al. Voor mij althans.

Risk
 
Je filterfunctie was goed, maar van de regel Dim sFilter As String moet je maken: Dim sFilter As String, sRapportFilter As String. Daarmee heb je dan de tweede variabele goed gedeclareerd. Beter nog is om de variabelen algemeen te declareren. Dat doe je door de de DIM regel helemaal naar boven te verplaatsen. Dan werkt hij in alle procedures op het formulier. Zodra je een variabele in twee procedures declareert (functie en knop bijvoorbeeld) wordt hij elke keer als één van de twee wordt gestart weer leeggemaakt. Dat schiet natuurlijk niet op als je een variabele net hebt gevuld, en de volgende actie maakt hem weer leeg...
Lees de cursus er nog eens op na, want het declareren van variabelen wordt al heel vroeg in de cursus uitgelegd.
 
Michel,

Vlgs. mij heb ik alles aangepast. Selecteren werkt maar in de rapportkop verschijnt nu niets meer.

Heb er virkante ogen van gekregen en bijna een dag rommelen.

Eind van mijn kennis en proberen. Heb nu zoveel versies gemaakt dat ik vast ergens overheen lees. Voor zover ik kan zien heb ik al de codes zoals jij mij hebt gegeven verwerkt.

Graag nog een keer jou deskundigheid erover laten schijnen.

Met dank

Risk


Code:
ption Compare Database


Private Sub cboVestiging_AfterUpdate()
Call FilterMaken
End Sub



Private Sub cboJaar_AfterUpdate()
Call FilterMaken
End Sub


Function FilterMaken()
[COLOR="#FF0000"]Dim sFilter As String, sRapportFilter As String[/COLOR]


If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
    End If
    
   [COLOR="#FF0000"] If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
        sRapportFilter = Me.cboVestiging
    End If[/COLOR]


If sFilter <> "" Then
    Me.Filter = sFilter
    Me.FilterOn = True
Else
    Me.Filter = ""
    Me.FilterOn = False
End If

End Function


Private Sub Knop405_Click()

stDocName = "Doorlooptijd schade op chauffeur"
[COLOR="#FF0000"]Dim sFilter As String, sRapportFilter As String[/COLOR]

If Me.cboJaar & "" <> "" Then
    sFilter = "[Jaar]=" & Me.cboJaar
    If Me.cboVestiging & "" <> "" Then
        sFilter = sFilter & " AND [Vestiging] = '" & Me.cboVestiging & "'"
        
    End If
Else
    If Me.cboVestiging & "" <> "" Then
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
    End If
End If


    Me.Form.Visible = False
[COLOR="#FF0000"]DoCmd.OpenReport stDocName, acViewPreview, , sFilter, OpenArgs:=sRapportFilter[/COLOR]
End Sub




Private Sub Reset_Click()
  
    Me.cboVestiging = ""
    Me.cboJaar = ""

    Call FilterMaken
    Me.Requery
End Sub
 
Wordt het zo langzamerhand niet eens tijd voor een voorbeeld van je db? Ik heb een werkend voorbeeld staan in de cursusmap, dus mijn mogelijkheden zijn wel zo'n beetje op. Ik heb ook geen flauw idee wat je nog fout doet; daarvoor heb ik toch echt jouw db nodig. Gaat ook geheid een hele hoop tijd schelen ;)
Probeer dit eens: (gewoon alle code vervangen)
Code:
Option Compare Database
Option Explicit
Dim sFilter As String, sRapportFilter As String

Private Sub Knop405_Click()

    stDocName = "Doorlooptijd schade op chauffeur"
    Call FilterMaken
    Me.Form.Visible = False
    DoCmd.OpenReport stDocName, acViewPreview, , sFilter, OpenArgs:=sRapportFilter

End Sub

Private Sub Reset_Click()
  
    Me.cboVestiging = ""
    Me.cboJaar = ""
    Me.Filter = ""
    Me.FilterOn = False

End Sub

Function FilterMaken()

    If Me.cboJaar & "" <> "" Then
        sFilter = "[Jaar]=" & Me.cboJaar
    End If
    
    If Me.cboVestiging & "" <> "" Then
        If sFilter <> "" Then sFilter = sFilter & " AND "
        sFilter = "[Vestiging] = '" & Me.cboVestiging & "'"
        sRapportFilter = Me.cboVestiging
    End If

    If sFilter <> "" Then
        Me.Filter = sFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

End Function
 
Michel,

Ik ga an de slag, dank voor de genomen moeite. als het niet luykt zal ik te rlering en den vermaeck een database destilleren uit de inmiddels omvangrijke moederdatabase. Ga er van uit da tals ik e.e.a. nu conform invoer het moet lukken.

Wordt vervolgd.

Risk
 
Michel,

Werkt niet. Opent het rapport niet. Als ik even hoor van je hoe ik een database als zip kan bijvoegen, ga ik komende week iets maken.

Dank en groet,

Risk
 
Als het een grote database is: maak een kopie, gooi alle tabellen er uit die er niet toe doen en laat alleen de tabellen staan die nodig zijn om het probleem te reproduceren. Laat in die tabellen een paar records staan; het gaat er om dat we kunnen zien of de code werkt of niet, en daar zijn niet veel records voor nodig. Comprimeer vervolgens de db en zip 'm. Dan zou hij al klein genoeg moeten zijn om te posten. Zo niet: comprimeren met WinRar; dan kun je deelbestanden maken van 100kb. En die kun je dan prima posten.
 
Ga ik doen. Is even werk, dus kom er op terug.

Dank

Risk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan