Enkel gevraagde tijdsperiode weergeven in een Access rapport

Status
Niet open voor verdere reacties.

HansNeedsYourHelp

Nieuwe gebruiker
Lid geworden
21 jul 2016
Berichten
3
Ik zou graag een rapport uitprinten dat de gegevens opsomt van bv van 01 jan 2016 beginnend om 07:00 uur tot bv 03 jan 2016 om 09:30 uur.
De query die ik nu gebruik, werkt door het kiezen van een begindatum en einddatum op een formulier.
In de querykolom datum staat onder criteria:
Between [Formulieren]![LOGSHEET (NL)]![startdate_outprint] And [Forms]![LOGSHEET (NL)]![Enddate_outprint]
Het rapport geeft de gevraagde data aan, maar ik krijg de gegevens enkel vanaf de gevraagde datum om 00:00 uur tot 00:00 op de gekozen einddatum.
Wat moet ik toevoegen? Liefst had ik op hetzelfde formulier twee vakjes voorzien waarin dan de begin en de eindtijd kan aangegeven worden.
Alvast bedankt,
Bekijk bijlage hulp database.zip

Kennis van Access: Beginner
 
Je hebt nu een ingebouwde macro gebruikt, en dat is an sich wel begrijpelijk gezien je laatste opmerking, maar dat levert niet de beste oplossing. Dat doen macro's namelijk nooit :). Daarom heb ik een VBA functie gemaakt op je knop die heel flexibel filtert; je kunt nu namelijk probleemloos filtervelden leeglaten. De filters werken nu met >= en <=, en dat betekent in de praktijk dus dat als je alleen een begindatum invult, je alle datums krijgt vanaf die datum. Bij alleen een eindtijd krijg je alle records die voor dat tijdstip liggen, ongeacht begintijd of datum. En welke combinaties je ook maar wilt maken.

Daarnaast heb ik je datumveld [date] omgedoopt naar [Datum]. Sowieso snap ik niet waarom je een Engelse naam gebruikt in een tabel met verder allemaal Nederlandse omschrijvingen; een misplaatst stukje internationalisme wat mij betreft. Veel erger is, dat Date een beschermd begrip is in ontwikkelland, en je moet een veld dus nooit dezelfde naam geven als een functie. Daar wordt een programmeur helemaal gek van :). En de database ook. Daar zit overigens een lineair verband tussen ;). Niet meer doen dus!
 

Bijlagen

Hallo OctaFish, het probleem is nog niet compleet opgelost.
Alvast bedankt voor je hulp. Indrukwekkend wat je met VBA zoallemaal kunt doen.
De VBA functie die je ingevoegd hebt werkt goed, veel mogelijke combinaties zo.
Maar dat werk maar gedeeltelijk, ik wil graag alle gegevens op mijn rapport die in de gevraagde tijdsperiode vallen. Als ik bv de gegevens wil opvragen van 21 Jul 0700 uur tot 22 Jul 0900 uur zouden er tien rijen met gegevens moeten op het rapport staan (dus ook die na 09:00 uur op 21 Jul 2016). Momenteel komen er vijf op het rapport. Al diegene die op 21 en 22 Jul 16 voor 09:00 uur plaatsvinden.
Ik wil dus vooral de gegevens afdrukken die tijdens een bepaalde periode genoteerd werden door een bepaalde persoon. Meestal gaat het over een periode +/- 1 shift/dag. Soms begint zo een shift om 07:00 uur, soms ook wel om 08:00 of 09:00 uur en meestal voor 24 uur. Vandaar. Mvg, Hans
 
Dat doet-ie inderdaad nu niet omdat het filter zo niet is opgebouwd. Filteren met meerdere voorwaarden houdt in dat je die voorwaarden op verschillende manieren kunt binden. Als je de code kan lezen (dat is wel een voorwaarde) dan zie je dat in deze variant aan alle voorwaarden moet zijn voldaan. Jij wil een andere combinatie variant, en dan zul je de voorwaarden anders meoten groeperen. Met een beetje logisch nadenken moet jemdaar makkelijk uit kunnen komen.
Groeperen doe je trouwens door voorwaarden die bij horen tussen haakjes te zetten.
 
Eigenlijk wel grappig dat niemand heeft gezien dat ik uit mijn (veel te warme) nek heb lopen kletsen :). Het is namelijk heel simpel op te lossen. Omdat je een datum + tijd hebt, die je wilt vergelijken met een andere datum + tijd, en zowel datums als tijden zijn, moet je de twee gewoon bij elkaar optellen. Dat geldt dan zowel voor het criterium als voor het veld. Dat veld bestaat nog niet, dus dat moet worden gemaakt voor de query. Maar dat is een fluitje van een cent.
De code is dus niet alleen veel simpeler, hij is ook veel korter. Als je in het VBA scherm deze code gebruikt (de declaraties zijn hetzelfde) dan heb je het gewenste resultaat.

Code:
    'Filter op begindatum + tijd
    If Not IsDate(Me.Begindatum) Then Me.Begindatum = Date
    sFilter = "([Datum] + [Uur] >= CDate(" & CDbl(Me.Begindatum) & ") + " & Replace(CDbl(Nz(Me.Beginuur, 0)), ",", ".") & ")"
    'Filter op einddatum + tijd
    If Not IsDate(Me.Einddatum) Then Me.Einddatum = Date
    sFilter = sFilter & " AND ([Datum] + [Uur] <= CDate(" & CDbl(Me.Einddatum) & ") + " & Replace(CDbl(Nz(Me.Einduur, 0)), ",", ".") & ")"
    'Totale query maken
    sRapport = "SELECT Id, Datum, Ref_Nr, Uur, Mededeling FROM gegevens "
    If sFilter <> "" Then sRapport = sRapport & "WHERE " & sFilter
    'Filter op query zetten
    Set qTemp = CurrentDb.QueryDefs("qRapport")
    qTemp.SQL = sRapport
    'rapport openen
    DoCmd.OpenReport "Gevraagde_gegevens", acViewPreview
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan