Newsgroup: it.comp.appl.access
Titolo: HELP: filtro che determini la prima settimana PIENA di un mese e l'ultima in una query

Premesso che sono abbastanza un principiante in access, e che di
solito me la sono sempre cavata leggendo FAQ e POST in questo
newsgroup - posto questo quesito per la prima volta.
In un DB relazionale ho inserito tutti gli ordini che ho effettuato. 
Devo però inserire un filtro in una query che individui IL PRIMO
GIORNO della prima settimana compresa di un mese e l'ULTIMO GIORNO
dell'ultima settimana compresa nel mese, escludendo quelle settimane a
cavallo tra due mesi.
Per primo giorno pieno  e compreso in un mese intendo  il  primo
lunedì della prima settimana dentro il mese escludendo  quelle a
cavallo tra due mesi: ESEMPIO Settimana da Lunedì 3 novembre fino a
sabato 8 novembre è PIENA visto che è compresa nel mese,  ma non
lunedì 30 settembre fino a venerdì 3 ottobre visto che è a cavallo tra
due mesi di settembre e ottobre.
E viceversa per l'ultimo venerdì del mese intendo l'ultima settimana
di un mese che cade di venerdì anche se venerdì è 31 e sabato e
domenica sono 1 e 2.
Ci ho provato in vari modi ma non ci sono riuscito. 
Grazie
P.S.
Se fossi stato così tonto da complicare un problema per poi scoprire
che esiste un banalissimo comando o un post nelle faq rispondetemi via
email in modo tale da non generare inutili post.

 email in modo tale da non generare inutili post.
Se la tabella che contiene i dati si chiama Tabella1 ed ha una struttura
simile a questa:
IDOrdine            Contatore e chiave primaria
NumeroOedine   Testo
DataOrdine         Data/ora
ecc. ecc.
Se con una query devi delezionare i record di Tabella1 la cui DataOrdine č
compresa tra il primo lunedě e l'ultimo venerdě di un determinato mese di un
determinato anno.
In un modulo del database memorizza queste due funzioni:
Public Function PrimoLunedě(MeseAnno As Long) As Date
For PrimoLunedě = DateSerial(MeseAnno - _
Int(MeseAnno / 10000) * 10000, Int(MeseAnno / 10000), 1) _
To DateSerial(MeseAnno - Int(MeseAnno / 10000) * 10000, _
Int(MeseAnno / 10000) + 1, 0)
    If WeekDay(PrimoLunedě) = 2 Then Exit For
Next
End Function
Public Function UltimoVenerdě(MeseAnno As Long) As Date
For UltimoVenerdě = DateSerial(MeseAnno - _
Int(MeseAnno / 10000) * 10000, Int(MeseAnno / 10000) _
+ 1, 0) To DateSerial(MeseAnno - Int(MeseAnno / 10000) _
* 10000, Int(MeseAnno / 10000), 1) Step -1
    If WeekDay(UltimoVenerdě) = 6 Then Exit For
Next
End Function
e creati una query di selezione parametrica che abbia il seguente codice
SQL:
SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.DataOrdine) Between PrimoLunedě([Digita il mese e l'anno
(mmaaaa):]) And UltimoVenerdě([Digita il mese e l'anno (mmaaaa):])));
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 domenica sono 1 e 2.
Calcolare il primo lunedě č stato abbastanza semplice, mentre per l'ultimo
venerdě "utile" ho dovuto lavorare un po' di piů.
Eccoti due funzioni che fanno quello che desideri:
=========================================================================
Function PrimoLun(mese As Integer, anno As Integer) As Integer
    Dim DataRiferimentoGiorno As Integer
    Dim Distanza As Integer
    DataRiferimentoGiorno = Weekday(DateSerial(anno, mese, 1), vbMonday)
    Distanza = (1 - DataRiferimentoGiorno + 7) Mod 7
    PrimoLun = 1 + Distanza
End Function
Function UltimoVen(mese As Integer, anno As Integer) As Integer
    Dim DataRiferimento As Date
    Dim DataRiferimentoGiorno As Integer
    Dim DataRiferimentoNumber As Integer
    Dim Distanza As Integer
    DataRiferimento = DateAdd("d", -1, DateSerial(IIf(mese = 12, anno + 1,
anno), (IIf(mese = 11, 12, (mese + 1) Mod 12)), 1))
    DataRiferimentoGiorno = Weekday(DataRiferimento, vbMonday)
    DataRiferimentoNumber = Day(DataRiferimento)
    Distanza = (DataRiferimentoGiorno - 5 + 7) Mod 7
    UltimoVen = DataRiferimentoNumber - Distanza
End Function
=========================================================================
Fammi sapere se ho centrato il problema.
Ciao.
-- 
Gabriele Bertolucci
PBsoft 
www.pbsoft.it