Rapport filteren op huidige datum formulier

Status
Niet open voor verdere reacties.

wiebeww

Gebruiker
Lid geworden
5 mei 2006
Berichten
38
Hallo,

Ik vroeg me af of het mogelijk is om het rapport "Fax naar JDV" automatisch te filteren aan de hand van de ingevulde "Leverdatum" in het formulier "Orders".

Of zijn er andere mogelijkheden die beter werken, zodat ik het rapport op de "Leverdatum" kan filteren.

Vriendelijke groet,

Wiebe
 

Bijlagen

Laatst bewerkt:
Met onderstaande methode kun je je doel verwezenlijken:

Code:
    Dim stDocName As String, strSQL As String, sTabel As String, sDatum As Date, iDatum As Double
    sDatum = CDate(Me.Leverdatum)
    iDatum = CDbl(sDatum)
    stDocName = "Fax naar JDV"
    DoCmd.OpenReport stDocName, acViewDesign, , , acHidden
    sTabel = Reports(stDocName).RecordSource
    If InStr(1, sTabel, "WHERE ") > 0 Then
        strSQL = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
    Else
        If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
            sTabel = "[" & sTabel & "]"
        End If
        strSQL = "SELECT * FROM " & sTabel & " "
    End If
    strSQL = strSQL & " WHERE [Leverdatum]= cDate(" & iDatum & ")"
    Reports(stDocName).RecordSource = strSQL
    DoCmd.Close acReport, stDocName, acSaveYes
    DoCmd.OpenReport stDocName, acViewPreview

Wat er gebeurt is het volgende: met deze code de recordbron uit het rapport uitgelezen in een variabele, gecheckt en teruggezet met de geselecteerde datum als filtering.

In eerste instantie heb je een tabel of query als bron van een rapport, waardoor je alle records ziet. Deze code leest de bron uit, en kijkt eerst of er een spatie in zit, wat de noodzaak van rechte haken [] om de naam verplicht maakt.
Verder wordt gekeken of er al een filtering op de recordsource staat, in welk geval er uiteraard een nieuwe filtering van moet worden gemaakt.
Uiteindelijk wordt de nieuwe SELECT .... statement aangevuld met het filtercriteria, en wordt de nieuwe recordsource op het rapport gezet.

Dit hele proces vindt plaats in de Design modus van het rapport, want alleen dan kun je de recordsource veranderen. Omdat je het geheel niet hoeft te zien, doen we dit in de Hidden modus, wat ook nog wat sneller werkt.
Als laatste wordt het rapport gesloten, en bewaard, en opnieuw geopend, nu uiteraard wel zichtbaar.

Michel
 
Kom er achter dat het ook nog wel simpeler kan:

Code:
Dim stDocName As String, sFilter As String
    Dim sDatum As Date, iDatum As Double
    sDatum = CDate(Me.Leverdatum)
    iDatum = CDbl(sDatum)
    stDocName = "Fax naar JDV"
    sFilter = " [Leverdatum]= cDate(" & iDatum & ")"
    DoCmd.OpenReport stDocName, acViewPreview, , sFilter

Hierbij zet je een filtering op een bestaande recordset, die dus niet hoeft te worden uitgelezen en aangepast.

Michel
 
Helemaal geweldig, bedankt!
Hier kan ik echt weer mee vooruit, ik kan het zelfs voor andere dingen gebruik door kleine aanpassingen te doen, top!

Groet,

Wiebe
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan