Range/overzicht tussen 2 data

Status
Niet open voor verdere reacties.

Friend

Verenigingslid
Lid geworden
31 jan 2009
Berichten
1.137
Beste forummers, Voor een afwezigheids rooster zou ik graag het volgende willen verwezelijken : ik heb eeb begindatum en een einddatum. Laten we zeggen : begin 15-03-2010 eind 20-03-2010 Pietje afwezig.

Hoe kan ik dit in een rapport verwzelijken dat er dan per dag komt te staan :

15-03-2010 Pietje
16-03-2010 Pietje
17-03-2010 Pietje
18-03-2010 Pietje
19-03-2010 Pietje
20-03-2010 Pietje

of
15-03-2010
Pietje
16-03-2010
Pietje
17-03-2010
Pietje
18-03-2010
Pietje
19-03-2010
Pietje
20-03-2010
Pietje

en Kareltje moet daar natuurlijk ook nog bij kunnen komen.

Iemand een idee?? :confused:
Met grote dank alvast
Friend
 
Om zo'n soort overzicht te kunnen maken, moet je de begin- en einddatum kunnen afzetten tegen een datum. Deze datum zou je bijvoorbeeld in een tabel kunnen zetten. Dan kun je daarna via een (gedeeltelijk) carthetisch product query een query maken waarbij elke dag die voorkomt in de reeks een eigen record krijgt.
Maar het begint er dus mee, dat je de datums eerst moet vastleggen in een tabel of een query.
 
OctaFish, tja daar zitten we dan met een mond vol tanden :confused:carthetisch product query:confused: Simpel databese zo gemaakt maar toen :shocked: Gezocht op deze term op internet. Kom ik weer bij ons mooie forum met afzender OctaFish aleen nog steeds met een mond vol tanden. Zou het voor jou mogelijk zijn om in mijn database een voorbeeld te maken ?? ?? Friend
 

Bijlagen

Ik heb de term echt niet zelf uitgevonden :p In essentie is het een query waarbij je de gegevens uit twee tabellen niet aan elkaar koppelt. De gegevenscombinaties die dan worden getoond bevatten dan niet alleen de records op basis van het overeenkomende sleutelveld, wat je doorgaans wilt zien, maar alle mogelijkheden.
Ik heb een voorbeeldje gemaakt waarin je kunt zien hoe dat werkt, op basis van een prijzentabel. Je moet dus in het voorbeeld kijken naar de query qVerhuur.
Ik zal ondertussen eens naar je db kijken...
 

Bijlagen

OctaFish, Watchdog stuurt mij een herinnering, heb jij toevallig nog gelegenheid gehad om naar de DB te kijken ?? Sowieso bedankt :) Friend
 
Heb even een voorbeeldje gemaakt. Kijk maar eens of je hem snapt...
 

Bijlagen

OctaFish, Hartelijk dank voor je uitwerking. Ik moest het even laten rusten omdat iets anders voorrang had. Maar hier zijn we. Ik zie dat je vanuit het formulier met de opdrachtknop de tabel Tdatum vult met de werkdagen van dit jaar. En dan via de query filter je de betreffende werkdagen eruit van de opgeven periode per persoon. Perfect. Is de tabel Tdatarangetotaal overbodig? Ik zie nl niet goed wat deze doet? Dan nog een aanvullende vraag : Met welke aanpassing in de code kan ik bv alleen de za en zo toevoegen en hoe alle dagen van de week. Nu neemt hij denk de dagen van het huidige jaar. Maar is het ook mogelijk dat ik bv 2011 al kan toevoegen. Mij dank is wederom groot voor je goede ondersteuning elke keer. :thumb: Friend
 
Ik heb de code voor je aangepast, zodat hij wat flexibeler inzetbaar is. Eerst de code:
Code:
Dim strSQL As String
Dim iStart As Long, iEind As Long
Dim dtMax As Date

    strSQL = "SELECT Max(Werkdag) AS LaatsteDag FROM tDatum;"
    With CurrentDb.OpenRecordset(strSQL)
        dtMax = CDate(.Fields(0).Value)
        .Close
    End With

    iStart = CDbl(DateSerial(Year(dtMax), Month(dtMax), Day(dtMax)) + 1)
    iEind = CDbl(DateSerial(Year(dtMax) + 1, Month(dtMax), Day(dtMax)) + 1)

    With CurrentDb.OpenRecordset("tDatum")
        Do While iStart < iEind
            If Weekday(CDate(iStart), vbMonday) < 6 Then
                .AddNew
                !Werkdag = CDate(iStart)
                .Update
            End If
            iStart = iStart + 1
        Loop
        .Close
    End With
Ik begin met het ophalen van de laatste datum. Die wordt toegekend aan de datumvariabele dtMax.
Vervolgens wordt nu de startdatum berekend (dtMax+1) en omgezet naar een Getal, en hetzelfde gebeurt met de Einddatum (=Startdatum+1 jaar). De einddatum kun je natuurlijk zelf wel over meer jaren instellen.
In de loop
Code:
        Do While iStart < iEind
            If Weekday(CDate(iStart), vbMonday) < 6 Then
                .AddNew
worden nu alleen werkdagen toegevoegd. Dat gebeurt door de functie Weekday, die de Maandag de waarde 1 toekent, Dinsdag 2 en zo verder. Aangezien Vrijdag de waarde 5 heeft, worden zaterdag en zondag overgeslagen.
Wil je alleen de weekenden toevoegen, dan wordt de formule dus: If Weekday(CDate(iStart), vbMonday) >= 6.
Wil je de hele week, dan is de IF formule niet nodig, en haal je die weg. (Uiteraard dan ook de End If). Ik heb hem er ingezet, om wat van de mogelijkheden te laten zien die je hebt om de tabel op te bouwen ;)
 
OctaFish, Hartelijk dank voor al je werk hiervoor. :thumb: Ga dit de komende dagen verder uitwerken. Kan er nu denk ik iets moois door maken. Nogmaals bedankt :thumb: Friend
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan