Print Page | Close Window

Filtro date settimana scorsa

Printed From: IALweb
Category: MS Office
Forum Name: Microsoft Access
Forum Discription: Temi legati ad Access e altri software per la gestione di database
URL: https://forum.ialweb.it/forum_posts.asp?TID=16467553
Printed Date: 21/Mag/2019 at 22:53
Software Version: Web Wiz Forums 10.17 - http://www.webwizforums.com


Topic: Filtro date settimana scorsa
Posted By: chiarava79
Subject: Filtro date settimana scorsa
Date Posted: 12/Feb/2019 at 08:01
Ciao a tutti, avrei l'esigenza di filtrare in una query tutti i dati la cui data è della settimana precedente (dal lunedì alla domenica compresa) e in un'altra query, le date della settimana attuale ( sempre dal lunedì ala domenica compresa)
Mi potreste aiutare? 
Grazie mille



Replies:
Posted By: @Alex
Date Posted: 12/Feb/2019 at 15:52
Questa Funzione restituisce il Numero della Settimana secondo Standard ISO.

Public Function Date2Week(Optional ByVal dtmDate As Variant) As Byte
    ' ------------------------------------------------------
    ' Calcolo formato ISO 8601:1988 standard
    ' Verificati i casi da KB [OK]
    ' https://support.microsoft.com/it-it/kb/200299
    ' ------------------------------------------------------
    Dim ret              As Byte
   
    ret = Format(dtmDate, "ww", vbMonday, vbFirstFourDays)
    If ret > 52 Then
      If Format(dtmDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then ret = 1
    End If
    Date2Week = ret
End Function

Se sai la settimana attuale... la settimana precedente sarà -1 e quella successiva +1

Altrimenti devi determinare i 2 Estremi della settimana scorsa metterli in AND tra loro ed in OR con quelli della successiva...

Function FirstDayInWeek(Optional ByVal dtmDate As Variant, Optional vFirstDayInWeek As VBA.VbDayOfWeek = VBA.VbDayOfWeek.vbMonday) As Date
    ' ------------------------------------------------------
    ' Restituisce il primo gg della settimana passando la Data
    ' ------------------------------------------------------
    If IsMissing(dtmDate) Then dtmDate = Date
   
    FirstDayInWeek = Fix(dtmDate - Weekday(dtmDate, vFirstDayInWeek) + 1)
   
End Function

Function LastDayInWeek(Optional ByVal dtmDate As Variant, Optional vFirstDayInWeek As VBA.VbDayOfWeek = VBA.VbDayOfWeek.vbMonday) As Date
    ' ------------------------------------------------------
    ' Restituisce l'ultimo gg della settimana passando la Data
    ' ------------------------------------------------------
    If IsMissing(dtmDate) Then dtmDate = Date

    LastDayInWeek = Fix(dtmDate - Weekday(dtmDate, vFirstDayInWeek) + 7)
   
End Function



-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 12/Feb/2019 at 17:01
Ti ringrazio molto ma credo di essermi spiegata male.... io vorrei che ogni qualvola che apro la query, mi vengano filtrate le date della settimana precedente e quelle della settimana attuale, senza che debba inserire la data della settimana

In pratica, dovrebbe essere eseguito il filtro a seconda della settimana in cui si visualizza la query senza che debba inserire la data d'inizio e fine settimana

Vi faccio un esempio:

Se nel campo data ho le seguenti date

01/02/2019
05/02/2019
11/02/2019

Nel caso in cui apra la query che prevede di filtrare le date della settimana precedente, l'unica data che dovrà apparire sarà 05/02/2019
essendo questa settimana compresa tra il 11/02/2019 al 17/02/2019

Se visualizzassi la stessa query il giorno 20/02/2019, dovrei visualizzare la data 11/02/2019
  


Posted By: @Alex
Date Posted: 12/Feb/2019 at 19:27
Ti eri spiegata benissimo... forse io no...? Ti ho suggerito le funzioni da usare per sviluppare il problema in cosa non ti è chiaro...?

Matematicamente la cosa è Banale non credi... se oggi(12/02/2019) siamo in settimana [7] vuoi vedere tutto quello che è in settimana 6 ed 8..., dove 6 ed 8 però in realtà sono [Week(Oggi)]-1 e [Week(Oggi)]+1 così sono dinamici... oppure sbaglio...?

Come si fa ad ottenere questo complesso criterio di Filtro...?
Calcolo la Settimana di Oggi e la sottraggo alla Settimana della Data del Record e, se è 1 in valore assoluto significa che la data rientra nel criterio che hai esposto...!

Crei una Query e scrivi nel Criteio:
ABS(Date2Week(NomeCampoData)-Date2Week())=1

Questa la funzione da mettere in un MODULO:
Public Function Date2Week(Optional ByVal dtmDate As Variant) As Byte
    ' ------------------------------------------------------
    ' Calcolo formato ISO 8601:1988 standard
    ' Verificati i casi da KB [OK]
    ' https://support.microsoft.com/it-it/kb/200299
    ' ------------------------------------------------------
    Dim ret              As Byte
    If IsMissing(dtmDate) Then dtmDate = Date
   
    ret = Format(dtmDate, "ww", vbMonday, vbFirstFourDays)
    If ret > 52 Then
      If Format(dtmDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then ret = 1
    End If
    Date2Week = ret
End Function



-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 12/Feb/2019 at 21:09
Ti ringrazio..... ora forse ho capito cosa volevi dire... dico forse perchè ho un mal di testa che mi sta tormentando e per tanto non sono molto concentrata.

Un'informazione se posso... mi viene evidenziata in giallo il codice

"ret = Format(dtmDate, "ww", vbMonday, vbFirstFourDays)"

e sinceramente non so come fare.....

grazie molte


Posted By: @Alex
Date Posted: 12/Feb/2019 at 21:52
Probabilmente hai dei riferimenti mancanti nelle librerie... spesso sono aggiunti in modo inconsapevole e non rimossi...
Se apri da vbeditor i riferimenti diversi vedere se qualcuno è marcato con Manca...
Se non serve, devi saperlo tu in base allo sviluppo, lo puoi rimuovere... se serve devi chiederti perché non sia corretto ed aggiornarlo.

-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 12/Feb/2019 at 22:12
Ho controllato e sebbene ce ne siano moltissimi non selezionati, in nessuno c'è scritto manca.


Posted By: @Alex
Date Posted: 12/Feb/2019 at 22:23
In realtà ne bastano 4... quelli giusti...
Per il resto devi fare Debug del codice... la funzione non ha alcun problema.

-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 12/Feb/2019 at 22:33
Mi potresti dire quali devono essere selezionati?


Posted By: @Alex
Date Posted: 12/Feb/2019 at 22:49
Facciamo che ci elenchi tu quelli che hai selezionato...

-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 12/Feb/2019 at 22:54
Visual basic
Microsoft access 14.0 objet Lybrary
Ole automation
Microsoft access 14.0 access database engine
accesibility cpladmin
active ds type



Posted By: @Alex
Date Posted: 12/Feb/2019 at 23:39
Originally posted by chiarava79 chiarava79 wrote:

Visual basic
Microsoft access 14.0 objet Lybrary
Ole automation
Microsoft access 14.0 access database engine
accesibility cpladmin
active ds type


Le ultime 2 perché le hai inserite dal momento che di default non lo sono... quindi sono frutto di selezione manuale.

-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 13/Feb/2019 at 07:55
Pur deselezionando le ultime due voci, compare sempre il messaggio" errore di runtime " Elemento non trovato
Confused


Posted By: @Alex
Date Posted: 13/Feb/2019 at 19:33
Per chiarezza, quello che ti viene riportatio come NON RICONOSCIUTO, in realtà è una Costante Nativa di Access
Const vbFirstFourDays = 2
    Membro di VBA.VbFirstWeekOfYear
Per questo motivo devi cercare il problema altrove, nel senso che quella Funzione NON è il problema.
Hai altro Codice...?
Utilizzi nella dichiarazione del codice la dichiarazione Obbligatoria come Opzione del VBEditor...?
SI traduce nel
Option Exlicit
Ai fatto il COMPILE del Codice per vedere se l'edito VBA ti aiuta ad individuare il problema...?


-------------
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/" rel="nofollow - Mio Sito
Scaricare i DEMO modificando l'Estensione.


Posted By: chiarava79
Date Posted: 14/Feb/2019 at 07:52
Ciao, ti ringrazio per la risposta.... purtroppo come immagino avrai capito non sono esperta di access.... e per tanto non sono in grado di capire dove possa stare il problema

Capisco che neppure tu lo possa individuare non essendo davanti al mio pc.. Smile

A questo punto non ti faccio perdere ulteriore tempo e ti ringrazio comunque per l'aiuto e soprattutto per la disponibilità


Posted By: willy55
Date Posted: 15/Feb/2019 at 01:13
Chiarava79,
se lo ritieni opportuno puoi pensare di allegare il tuo db in modo che chiunque sia interessato possa visionare il problema e magari fornirti indicazioni a supporto.


-------------
Willy



Print Page | Close Window

Forum Software by Web Wiz Forums® version 10.17 - http://www.webwizforums.com
Copyright ©2001-2013 Web Wiz Ltd. - http://www.webwiz.co.uk