Newsgroup: it.comp.appl.access
Titolo: Numero settimana

Ciao, ho una agenda per gli appuntamenti e vorrei stampare a video un report che mi indichi oltre alla settimana corrente che ho risolto con questo codice:
-----------------------------------------------------------------------------
    Dim Inizio As Date
    Dim Fine As Date
    For Inizio = Date To Date - 7 Step -1
        ' Se lunedì
        If Weekday(Inizio) = 2 Then Exit For
    Next Inizio
    For Fine = Date To Date + 7
        'Se domenica
        If Weekday(Fine) = 1 Then Exit For
    Next Fine
    Me.Filter = "DataAppuntamento >= #" & Format(Inizio, "mm/dd/yyyy") _
    & "# And DataAppuntamento <= #" & Format(Fine, "mm/dd/yyyy") & "#"
    Me.FilterOn = True
-----------------------------------------------------------------------------
e che funziona perfettamente, anche una determinata settimana successiva o precedente.
Come potrei integrare il codice di cui sopra.
Spero di essere stato chiaro, se cosi non fosse chiedetemi ulteriori informazioni,
Grazie

 Come potrei integrare il codice di cui sopra.
 
Cosa intendi dire per integrare ???
devi darci qualche dettaglio in più, 
se per esempio hai una maschera di appuntamenti la apri con il filtro !!!
 
pero vedo che fai :
- 1 ciclo per trovate il lunedi
- 1 ciclo per trovare il sabato
 
 
prova a ripensarlo cosi:
<code> --------------------------------------
Dim dtmIn As Date
Dim dtmFi As Date
 
'dtmIn = Date - Weekday(Date, 2) + 1
dtmIn = DateAdd("d", -(Weekday(Date, 2) - 1), Date)
dtmFi = dtmIn + 6
</code> -------------------------------------
 
'   
https://msdn.microsoft.com/en-us/library/aa262710(v=vs.60).aspx
 
'   
https://msdn.microsoft.com/en-us/library/office/gg264334.aspx
 
 
 

 Eccetera   
 
Mi correggo,   meglio usare sempre DateAdd
 
<code> -----------------------------------
Dim dtmIn As Date
Dim dtmFi As Date
 
'   dtmIn = Date - Weekday(Date, 2) + 1
dtmIn = DateAdd("d", -(Weekday(Date, 2) - 1), Date)
'   dtmFi = dtmIn + 6
dtmFi = DateAdd("d", 6, dtmIn)
</code> ------------------------------------
 
.

 Mi correggo,   meglio usare sempre DateAdd
 
perche' ? 
 

 perche' ?
 
Premesso che io storicamente sono un fautore dei calcoli Algebrici fra date
( per Algebrico intendo senza utilizzo di DateAdd o DateDiff )
 
Premesso anche che ormai 10 anni fa ho fatto un programmino per gestire 
le presenze lavorative di personale
Non usando assolutamente DateAdd o DateDiff
( pensa che a quei tempi non conoscevo queste 2 funzioni )
e il programma ancor oggi funziona benissimo
( a parte qualche trascurabile infinitesima imprecisione )
 
 
Ormai mi sono ricreduto per:
- maggior precisione di DateAdd / DateDiff rispetto alla somma algebrica
- maggior specificita della formula
- maggior semplicita di utilizzo 
 
 
Un esempio banalissimo:
Fatti una tabella con 2 soli campi formato DataOra
- Inizio
- Fine
 
mettici 1 record
- Inizio  15/05/2015 08:10:00
- Fine    15/05/2015 17:00:00
 
prova a calcolare i minuti trascorsi con
- Differenza Algebrica
- DateDiff 
 
quindi applichi questa query:
<code> --------------------------
SELECT 
T1.Ingresso, 
T1.Uscita, 
([Uscita]-[Ingresso])*24*60 AS Algebrica, 
DateDiff("n",[Ingresso],[Uscita]) AS DatFunzioni
FROM 
T1
;
</code> -------------------------
 
vedrai che 
- la differenza algebrica restituisce   529,999999998836
- mentre il DateDiff restituisce PIU CORRETTAMENTE  530
 
 
.
 

Caspita,  ma non si puo modificare il post ?????
 
Un piccolo errore:
 
i campi della tabella non si chiamano Inizio e Fine
bensì  Ingresso e Uscita
 
come del resto suggerisce la query proposta
 
.


Cavolo
 
Grazie, bel post. Davvero. 

Il giorno domenica 5 aprile 2015 10:18:24 UTC+2, Mancini ha scritto:

Ciao a tutti.
Non entro nel merito ma... Esiste anche Round:
 
SELECT T1.Ingresso, 
       T1.Uscita, 
       Round((T1.Uscita-T1.Ingresso)*1440) AS Algebrica, 
       DateDiff("n",T1.Ingresso,T1.Uscita) AS DatFunzioni
FROM T1;
 
-- 
Ciao! :)
Maurizio