bij produceren rapport een (datum)criteria meegeven als filter

Status
Niet open voor verdere reacties.

raymin

Gebruiker
Lid geworden
24 aug 2010
Berichten
127
Hoi allemaal,

Ik heb een formulier gemaakt waarin ik een query kan vullen/wijzigen met data in dit formulier heb ik een subformulier (heet dat zo?) van de query, zodat je meteen kunt zien dat de nieuwe invoer in de query wordt opgenomen. (nadat je op alles vernieuwen hebt geklikt, kan dit auto?)

nu wil ik twee zaken filteren:

1. ik wil een knop / vinkje waarmee ik de query kan filteren op een veld (zodat het subformulier alleen de regels laat zien die de criteria van dit veld bevatten)

2. ik zou een criteria willen toepassen op twee velden (datum en project) in de query, zodat bij het produceren van een rapport alleen de regels in het rapport komen die binnen deze criteria vallen
 
Wat heb je precies gemaakt? Je hebt het over een hoofdformulier op basis van een query, en een subformulier op basis van de query. Is dat dezelfde query, en zo ja: waarom? Normaal zou je in een subformulier records laten zien die zijn gerelateerd aan de records in het hoofdformulier. Bijvoorbeeld: een formulier Klanten, en een Subformulier met daarin de Bestellingen van die klant. Als je een nieuwe bestelling maakt voor een klant, doe je dat in het subformulier, en zie je de bestelling gelijk op het scherm zonder te hoeven verversen. Idem dito als je een nieuwe klant maakt; het subformulier Bestelling kun je gelijk gebruiken als de klant is opgeslagen.
Als je de gegevens in het subformulier dus niet gelijk te zien krijgt, zit er een constructie achter die we eerst moeten weten.
Voor het filteren op een formulier zijn verschillende voorbeelden te vinden op het forum. Bijvoorbeel hier:
Voorbeeld 1 of anders in bijgaand voorbeeld.
 
ik ga even naar het voorbeeld kijken.

Voor de duidelijkheid, ik heb het volgende;

een tabel met klanten (met formulier om toe te voegen / te muteren)
een tabel met projecten (met formulier om toe te voegen / te muteren)
een tabel met werkzaamheden (om uit te kiezen of toe te voegen in de query)
een tabel met uren /datum /project.

Ik heb een query "urenregistratie" waarin ik via een formulier een project kan kiezen (de klant wordt dan auto ingevuld) ik kan daar een datum, werkzaamheden, en uren invullen per dag/project. (omdat in de tabel projecten ook een uurloon is opgenomen wordt dit per dag meteen uitgerekend in de query)

In dit formulier wordt als sub de query weergegeven, zodat ik als gebruiker zie dat er een record is toegevoegd.

Is zo een beetje duidelijk wat ik nu heb?
 
ik gebruik Access 2010 en krijg de bijlage van je post niet geopend, is dat een versie kwestie?
 
Zou je gewoon moeten kunnen openen. Welke foutmelding krijg je?
 
Deze meldingen:

Uw MS Access-database of -product bevat een ongeldige of verbroken verwijzing naar het bestand OWC11.DLL
Uw MS Access-database of -product bevat een ongeldige of verbroken verwijzing naar het bestand MSCAL.OCX versie 7
 
ik ben een stukje verder;

Ik heb een formulier gemaakt met een start- en een einddatum tekstvak, waarbij ik een datum range kan aangeven voor mijn rapport. Als ik nu op datum EN op project wil filteren, wat pas ik dan aan in de code?

deze code zit onder de knop voor het rapport:
Code:
Private Sub cmdPreview_Click()
'On Error GoTo Err_Handler      'Remove the single quote from start of this line once you have it working.
    'Purpose:       Filter a report to a date range.
    'Documentation: http://allenbrowne.com/casu-08.html
    'Note:          Filter uses "less than the next day" in case the field has a time component.
    Dim strReport As String
    Dim strDateField As String
    Dim strWhere As String
    Dim lngView As Long
    Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    
    'DO set the values in the next 3 lines.
    strReport = "rptSales"      'Put your report name in these quotes. kun je aangeven welk raport?
    strDateField = "[Datum]" 'Put your field name in the square brackets in these quotes.
    lngView = acViewPreview     'Use acViewNormal to print instead of preview.
    
    'Build the filter string.
    If IsDate(Me.txtStartDate) Then
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) & ")"
    End If
    If IsDate(Me.txtEndDate) Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "(" & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) & ")"
    End If
    
    'Close the report if already open: otherwise it won't filter properly.
    If CurrentProject.AllReports(strReport).IsLoaded Then
        DoCmd.Close acReport, strReport
    End If
    
    'Open the report.
    'Debug.Print strWhere        'Remove the single quote from the start of this line for debugging purposes.
    DoCmd.OpenReport strReport, lngView, , strWhere

Exit_Handler:
    Exit Sub

Err_Handler:
    If Err.Number <> 2501 Then
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "Cannot open report"
    End If
    Resume Exit_Handler
End Sub

Het zou ook nog mooi zijn als ik een rapport kan kiezen. (kan twee knoppen maken, maar dat kan vast mooier)

Kan iemand me even op weg helpen, met de code. (bovenstaande code is natuurlijk een range van tot en het moet nu een keuzelijst zijn neem ik aan)
 
Er vanuit gaande dat je voor je projecten een keuzelijst maakt met de naam cboProject, ziet de code voor strWhere er zo uit:

Code:
    If IsDate(Me.txtStartDate) Then
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) 
    End If
    If IsDate(Me.txtEndDate) Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "(" & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) 
    End If
 strWhere = strWhere & " AND ProjectID = " & Me.cboProject.Value & ")"
Om een rapport te kunnen selecteren heb je ook weer een keuzelijst nodig. Deze nieuwe keuzelijst moet in een verborgen tabel ([MSysObjects]) de Rapportnamen uitlezen, en die in een query toewijzen aan de keuzelijst. Als je de query opslaat, kun je die als Besturingselementbron voor de keuzelijst gebruiken. Of je zet de SQL direct in de Besturingselementbron.
Code:
SELECT Name, Type FROM MSysObjects
WHERE (Type=-32768)
ORDER BY Name
Bovenstaand voorbeeld kun je als voorbeeld gebruiken voor een keuzelijst waarmee je een Formulier kunt selecteren. Voor een lijst met Rapporten heb je uiteraard een andere waarde nodig.
 
Hoi OctaFish,

Ik krijg de volgende foutmelding:
foutmelding.png

Kun je hier wat mee? Het project ID klopt wel. Het lijkt alsof er een ( ontbreekt, maaruuh ik zie deze week voor het eerst code in access)
 
Zit het hier misschien?
Jouw code:
Code:
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) [B][COLOR=red]& ")"[/COLOR][/B]
Mijn code:
Code:
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate)
Om de nieuwe code toe te voegen moet het eerste sluithaakje (bij het eerste filterargument) weg.
 
hmmm en dan dacht ik nog wel dat ik op zat te letten..

ik krijg nu alleen deze foutmelding:
foutmelding1.png
 
@OctaFish,

er staat een klein foutje in de code die je eerder aanleverde.
Deze regel

strWhere = strWhere & " AND ProjectID = " & Me.cboProject.Value & ")"

moet zijn

strWhere = strWhere & " AND ProjectID = " & Me.cboProject.Value & " & ")"

Dan gaat het wel goed.
Persoonlijk zou ik de extea haakjes aan begin en eind weglaten.
Deze voegen nl niets toe.

Taqrdis
 
Als ik Tardis zijn opmerking verwerk, wordt de code "rood"

Als ik de foutopsporing volg, is de volgende regel "geel" weergegeven.

DoCmd.OpenReport strReport, lngView, , strWhere
 
Mijn code is prima; de aanpassing van Tardis is niet correct, en zeker niet logisch. Ik zie wel een ([Datum] in de code. Dat moet zijn: [Datum].
In het algemeen: als je in een code 3 ( hebt, moet je ook 3 ) hebben. Door dus haakjes te tellen kom je al een heel eind...
 
Ik kreeg ook al een foutmelding in de code van de aanvulling.

Er miste ergens een haakje, dat is nu opgelost.

Echter krijg ik nu de melding dat ik een parameterwaarde moet opgeven, die van "ProjectID" ik heb dat al eens eerder gehad,toen heb ik in de code verwezen naar een veldnaam. Is dat nu ook het geval? (ik heb er een aantal geprobeerd die mij logisch leken, echter dan dezelfde melding.
 
Met alleen de datum filter werkt het super, het "probleem" ontstaat wanneer ik de regel voor de "project" omschrijving toevoeg.
 
Er staat een haakje te weinig in (of te veel) als txtEndDate gevuld is
Code:
    If IsDate(Me.txtStartDate) Then.
        strWhere = [COLOR="darkred"]"("[/COLOR] & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) 
    End If
    If IsDate(Me.txtEndDate) Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & [COLOR="darkred"]"("[/COLOR] & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) 
    End If
 strWhere = strWhere & " AND ProjectID = " & Me.cboProject.Value & [COLOR="darkred"]")"[/COLOR]

Laat die haakjes weg, omdat je alleen AND gebruikt hebben ze geen functie!
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan